函数RData()实现从文件IN.dat中读取一篇英文文章存入字符串数组StrResult中;请编写Strmove()函数,其功能是:以行为单位,依次把字符串中所有小写字母"o"左边的字符串内容移到该字符串的右边存放,然后把小写字母"o"删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组StrResult中。最后main()函数调用函数WData(),把结果StrResult输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
例如,原文:n any field.Yu can create an index
you have the corlrectrecord.
结果:n any field.Yu can create an index
rd.yu have the crlrectrec
注意:部分源程序已经给出。请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
char StrResult[50][80];
int maxline = 0; /* 文章的总行数 */
int RData(void);
void WData(void);
void Strmove(void)
{ int i, j, k;
char buf[80];
for (i=0; i<maxline; i++)
{ j = strlen(StrResult[i])-1;
while (StrResult[i][j]!='o' && j>=0)
j--;
if (j < 0)
continue;
StrResult[i][j] = 0;
strcpy(buf, &StrResult[i][j+1]);
k = j = 0;
while (StrResult[i][j])
{ while (StrResult[i][j]!='o' && StrResult[i][j])
j++;
if (!StrResult[i][j])
{ strcat(buf, &StrResult[i][k]);
break;
}
StrResult[i][j] = 0;
strcat(buf, &StrResult[i][k]);
j++;
k = j;
}
strcpy(StrResult[i], buf);
}
}
void main()
{ if (RData())
{ printf("数据文件IN.dat不能打开!\n\007");
return;
}
Strmove();
WData();
}
int RData(void)
{ FILE *fp;
int i = 0;
char *p;
if ((fp = fopen("IN.dat", "r")) == NULL)
return 1;
while (fgets(StrResult[i], 80, fp) != NULL)
{ p = strchr(StrResult[i], '\n');
if (p)
*p = 0;
i++;
}
maxline = i;
fclose(fp);
return 0;
}
void WData(void)
{ FILE *fp;
int i;
fp = fopen("OUT.dat", "w");
for (i=0; i<maxline; i++)
{ printf("%s\n", StrResult[i]);
fprintf(fp, "%s\n", StrResult[i]);
}
fclose(fp);
}
这是一道三级网络技术上机题!!