3题目:
题目3:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数STROR(),其函数功能是:以行为单位把字符串中的所有小写字母O左边的字符串内容移到该串的右边存放,然后并把小写字母O删除,余下的字符串内容移到已处理字符串的左边存放.最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT.DAT中.
例如:原文:You can create an index on any field.
you have the correct record.
结果: n any field.You can create an index
rd.yu have the crrect rec
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.
类型:字符串(单词)的倒置和删除。
答案:
void StrOR(void) /*标准答案*/
{int I,j,k,index,strl;
char ch;
for(I=0;I
{strl=strlen(xx[I]);
index=strl;
for(j=0;j
if(xx[I][j]=='o')
{for(k=j;k
xx[I][k]=xx[I][k+1];
xx[I][strl-1]= ' ';
index=j;}
for(j=strl-1;j>=index;j--)
{ch=xx[I][strl-1];
for(k=strl-1;k>0;k--)
xx[I][k]=xx[I][k-1];
xx[I][0]=ch;}
}
}
或者:
void StrOR(void)
{ int i;
char a[80],*p;
for(i=0;i
{ p=strchr(xx[i],'o');
while(p)
{ memset(a,0,80);
memcpy(a,xx[i],p-xx[i]);
strcpy(xx[i],p+1);
strcat(xx[i],a);
p=strchr(xx[i],'o'); } }
}
或者:
void StrOR(void) /*我的非指针解法*/
{int i,righto,j,k;
char tem[80];
for(i=0;i
{k=0;righto=0;memset(tem,0,80);
for(j=strlen(xx[i])-1;j>=0;j--)
{if(xx[i][j]=='o') {righto=j;break;} }
for(j=righto+1;j
for(j=0;j
{if(xx[i][j]!='o') tem[k++]=xx[i][j];}
strcpy(xx[i],tem);
}}
PROG1.C
# include"stdio.h"
# include"string.h"
# include"conio.h"
char xx[50][80];
int maxline=0;
int ReadDat(void);
void WriteDat(void);
void StrOR(void)
{
}
void main()
{clrscr();
if(ReadDat())
{printf("Can't open the file!\n");
return;}
StrOR();
WriteDat();
system("pause");
}
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
{printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
} 这道题的答案我看了很久,就是不懂!那位能帮我详细讲解一下?教材的指针我没有看过(只是为了考试能过而已),所以请讲讲非指针的得那个答案,我感觉答案是错的...