表达该放手了的歌曲:C语言 替换字符问题

来源:百度文库 编辑:高考问答 时间:2024/04/29 19:32:33
函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请
编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个
字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,
得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原
第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应
的位置上。最后把已处理的字符串逆转后按行重新存入字符串数组XX中,最后调用函数W
RITEDAT()把结果XX输出到文件OUT9.DAT中.

void ShA(void)
{
int i,j;
char t1;
for(i=0;i<maxline;i++)
{t1=xx[i][0];
for(j=0;xx[i][j+1]!='\0';j++)
xx[i][j]=xx[i][j]+xx[i][j+1];
xx[i][j]=xx[i][j]+t1

请问字符串数组为什么要定义成一个二维的数组?
还有这个套欠的循环我看不太懂,请高手解释一下

因为一个字符串要用一个1维数组表示.
上面程序共有 maxline(行)个字符串,所以要用2维数组存放.

for(i=0;i<maxline;i++) 对 maxline 个字符串依次循环.
t1=xx[i][0]; // 把这个字符串的第一个字符放入 t1 待用.

for(j=0;xx[i][j+1]!='\0';j++) // 对一个字符串中的一个一个字符依次循环,直到发现字符串的结束标志 '\0'

for(j=0;xx[i][j+1]!='\0';j++)
xx[i][j]=xx[i][j]+xx[i][j+1]; // i行(同行)相邻的两个字符值相加.

// j循环到达最后一个字符(i行里的最后一个字符),做:
xx[i][j]=xx[i][j]+t1; // 把最后一个字符值加原来第一个字符的值.

为什么要用t1呢,因为j循环一开始就把第二个字符值加到第1个字符里,xx[i][0]被更新了,不能用它来算最后一个字符的更新值,t1是j循环开始前,我们存放了xx[i][0]的老值.

xx[i][j+1]!='\0', 无论字符有多长,只要发现'\0'[即NULL],就表示字符结束,若没碰到'\0'字符就没结束.--这是C语言的规定,约定.