该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是一道c语言题,题目如下:
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中:请编制函数StrOR(),其函数的功能是:以该文章中的行为单位依次扫描一行字符串中的小写字母o,每次将小写母o的左右字符串部分作交叉换位,即左边字符串移到小写字母o的右边,而原先右边的则反之,并把小写母o删除,依次直至这一行中的小写母o处理完,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。
例如原文:you have the correct record.
第1个o:u have the correct record.y
第2个o:rrect record.yu have the c
第3个o:rd.yu have the crrect rec
提示:对于每一行字符串数组处理有如下一种递归调用算法可供参考:查找字符串中首个小写字母'o'的位置;没有找到'o',则结束递归调用;找到'o',则按题意对字符串进行处理,形成新的字符串,然后返回,继续进行递归调用。
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分源程序存放在PROG1.C中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
以下是我的答案:
#include
#include char xx[50][80] ;
int maxline = 0 ; /* 文章的总行数 */ int ReadDat(void) ;
void WriteDat(void) ; void StrOR(void)
{
int i,j,k,t;
char a[80];
for(i=0;i
{
k=0;
while(xx[i][k]!='\0'&&k<80)
if(xx[i][k]=='o')
{
j=0;
t=k+1;
while(xx[i][t]!='\0'&&t<80)
{
a[j]=xx[i][t];
t++;
j++;
}
t=0;
while(t
{
a[j]=xx[i][t];
t++;
j++;
}
a[j]='\0';
k=0;
}
else
k++;
t=0;
k=0;
while(a[t]!='\0'&&t
{
xx[i][k]=a[t];
t++;
k++;
}
xx[i][k]='\0';
}
} void main()
{
if(ReadDat()) {
printf("数据文件IN.DAT不能打开!\n\007") ;
return ;
}
StrOR() ;
WriteDat() ;
} int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
char *p ; if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;
while(fgets(xx[i], 80, fp) != NULL) {
p = strchr(xx[i], '\n') ;
if(p) *p = 0 ;
i++ ;
}
maxline = i ;
fclose(fp) ;
return 0 ;
} void WriteDat(void)
{
FILE *fp ;
int i ; fp = fopen("OUT.DAT", "w") ;
for(i = 0 ; i < maxline ; i++) {
printf("%s\n", xx[i]) ;
fprintf(fp, "%s\n", xx[i]) ;
}
fclose(fp) ;
}
编译和组建均无错误,但程序无法正确运行得出结果,我感觉是 void StrOR(void)函数什么地方出了错,导致 void StrOR(void)函数无限循环没法出结果。还有我没有调用字符串库函数,所以也不太确定我写出这个程序与题意在逻辑上是否一致。
希望各位老师帮我找出错误,最好有详细一点的说明。
谢谢!!!