请教一道计算机三级c语言的编程题

2024-11-30 20:18:19
推荐回答(2个)
回答1:

应该是strl=strlen(xx[i])吧?
xx是一个字符串数组,存贮的是每行的字符串,xx[i]则表示第i行的字符串,strl为第i行的长度。
这段程序可以达到你的要求:
输入:you he me
输出:me he you

程序分析如下:用上面的例子
xx[i]是一个字符串,xx[i] = "you he me";
strl = 9(xx[i]的长度)
1·while循环一开始strl被减一,strl=8;
2·当xx[i][strl](表示字符串xx[i]中的第strl个字符,strl为0到8)不为字母时(在例子中是“空格符”),此时strl = 6;
3·line字符串此时为空,执行strcat(line,xx[i]+strl+1)和strcat(line," ")后line中内容为:"me ";因为:strl+1 = 7;xx[i]为字符串的首地址,xx[i]+strl+1表示的字符串实际上为"me"(它实际上是一个地址,xx[i]中从第8个字符——xx[i][7]——的地址,第8个字符——xx[i][7]——为字符'm',明白吗?)
4·执行xx[i][strl]=0后xx[i]字符串变为:"you he",实际上这句是将xx[i]的倒数第一个空格字符改为了0(字符串结束符)
5·重复1~4步直到strl为0退出while循环,此时line字符串为:"me he ";xx[i]字符串为:"you";
6·执行strcat(line,xx[i])后,line字符串为:"me he you";
7·最后执行strcpy(xx[i],line)后,xx[i]字符串为:"me he you"
8·重复1~7步直到所有字符串处理完成(i=maxline)

回答2:

XX应该是处理前的数据
程序思想是从每一列的最后面扫描,发现单词就添加到line里面;
line[0]=0的意思是将line数组的字符清空,不知道能不能达到要求?
if(!(isalpha(xx[i][strl]
应该是:if(!(isalpha(xx[i][strl])))
当xx[i][strl不是字母的时候执行下面语句;
strcat(line,xx[i]+strl+1);
应该是:strcat(line,xx[i][strl+1]);这只是将空格后面的一个字母放到line里面去,好像还不能思想程序功能;
估计这个程序不能达到你想要的要求,关键在这一条:strcat(line,xx[i]+strl+1);应该还记录上一次出现非字母的位置,联结从这次空格后第一个到上次空格前一个的所有字符;