100题第4道题
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,strl,l;
char c;
for(I=0;I<maxline;I++) /*maxline为行数*/
for(j=0;j<strlen(xx[I]);j++) /*strlen()相当于求得列数*/
{
c=xx[I][j]; /*将字符矩阵的每一元素存入字符变量C*/
if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c==' ') ; /*如果C是A-Z或a-z或为空(不是空格)那么....
else xx[I][j]=' '; /*如果不满足上述要求,则将该元素置空,即完成了“去除标点符号”这一功能*/
}
for(l=0;l<maxline;l++) /* 这是什么意思呢?已经有了一个变量I在使用行数了,这里又循环行数???*/
{
char ch[80]={0}; /*定义一个一维字符数组ch[],其含有80个元素,并将初值都设为0*/
char pp[80]={0}; /*定义一个一维字符数组pp[],其含有80个元素,并将初值都设为0*/
strl=strlen(xx[l]); /*将每行字符数存入 strl*/
I=strl-1;
k=1;
while(1) /*又出来这么一个东西!!!!!!!!!!!!*/
{
while (((xx[l][I]>='a'&&xx[l][I]<='z')||(xx[l][I]>='A'&&xx[l][I]<='z'))&&I>=0)
{
for(j=k;j>=0;j--)
pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++;I--;
}
strcat(ch,pp);strcpy(pp, """");k=1;
if(I==-1)break;
while((xx[l][I]<'A'||xx[l][I]>'z')&&I>=0)
{for(j=k;j>=0;j--)
pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++; I--;}
strcat(ch,pp); strcpy(pp,"""");
k=0;
if(I==-1)break;}
strcpy(xx[l],ch);
}}
红色部分代表我已看得崩溃了。!!!