C语言编程问题!!!!!请帮下我!!!

来源:百度知道 编辑:UC知道 时间:2024/05/14 17:25:10
函数的功能是:
以行为单位依次把字符串中所有小写字母O左边的字符串内容移到该字符串的右边存放,然后把小写字母O删除,余下的字符串内容移到以处理字符串的右边存放,之后把已处理的字符串仍按行重新存入字符串数组XX中.
char xx[50][80];
void StrOR(void)
{
int i, j, k;
char buf[80];
for (i=0; i<50; i++)
{
j = strlen(xx[i])-1;
while (xx[i][j]!='o' && j>=0)
j--;
if (j < 0)
continue;
xx[i][j] = 0;//题目上说先找到o,先将o替换成字符串结束标志'\0',是这里吗,让xx[i][j]=0;就表示字符串结束了吗?
strcpy(buf, &xx[i][j+1]);//这里的buf得到是o后面的所有字符吗?是不是得到了数组的首地址,就得到了整个数组呢?
k = j = 0;
while (xx[i][j])//这里的循环条件是什么啊?
{
while (xx[i][j]!='o' && xx[i[j])//&&
xx[i][j]是什么意思呢?
j++;
if (!xx[i][j])//这里的!xx[i][j]是?
{
strcat(buf, &xx[i][k]);
break;//这里跳出while(xx[i][j])循环了吗?
}
xx[i][j] = 0;
strcat(buf, &xx[i][k]);
j++;
k = j;
}
strcpy(xx[i], buf);
}
}

问:xx[i][j] = 0;//题目上说先找到o,先将o替换成字符串结束标志'\0',是这里吗,让xx[i][j]=0;就表示字符串结束了吗?
答:是的,从最右一个字符向左找,找到后把o变字符串结束标志。也就是找到了输入行的最后一个o

问:这里的buf得到是o后面的所有字符吗?
答:是的。&xx[i][j+1]不是数组的首地址,而是最后一段字符串的首地址,老字符串尾的串结束标志还在,所以copy到buf里的恰好是 最后那段 字符串。

问:while (xx[i][j])//这里的循环条件是什么啊?
答:有字符就是真,字符串结束符是0,0就是假,到假就不再循环。

问:xx[i][j]是什么意思呢? j++;
答:从 k = j = 0; 开始,从左向右找 o,你看,循环体里有j++; 也就是依次 找i行里的第 j=0,1,2...字符,看它是不是 o.

问:if (!xx[i][j])//这里的!xx[i][j]是?
答:如果这个字符是 字符串结束符0,则做...(把一串字符添到buf原有字符后面)。

问:break;//这里跳出while(xx[i][j])循环了吗?
答:跳出 它所在的本层循环体,只跳一层。因为你的程序标点符号看上去有点乱,我不能肯定它是否跳出while(xx[i][j])循环。
它应当要继续向右找o,找到一个o,把它变0,再把这小段字符串添到buf里,一直到遇到第一次从右向左找到的那个o的位置,要等做完strcpy(xx[i], buf); 才跳出去处理下一行。