4:函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中; 请编制函数StrOL( ), 其函数的功能是: 以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排,同时去除标点符号,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT6.DAT中。
例如: 原文: You He Me
I am a student.
结果: Me He You
student a am I
原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含标点符号和空格。
void StrOL(void)
{
int i,j,k,m,n,ll;
char yy[80];
for(i=0; i < maxline; i++) /*取行数范围内循环*/
{
ll=strlen(xx[i]); /*列数赋给ll*/
k=n=0;
for(j=ll-1; j>=0; j--) /*我终于明白了为什么总是 strlen()-l了,原来strlen()函数求的是某行*/
/*字符数,但如果排列时,就是从0开始的。*/
{
if(isalpha(xx[i][j]))
k++; /* isalpha 判断字符是否为英文字母,当c为英文字母a-z或A-Z时,返回非零值,否则返回零。*/
else
{
for(m=1; m<=k; m++)
yy[n++]=xx[i][j+m];
k=0;
}
if(xx[i][j]==' ') /*这中''并不代表空格吧?*/
yy[n++]=' ';
}
for(m=1; m<=k; m++) yy[n++]=xx[i][j+m]; /*没看懂,不知要干什么*/
yy[n]=0; strcpy(xx[i],yy); /*这行没看懂,strcpy()函数的意思是不是把yy里的内容拷贝到xx[]里呢?*/
}
}