题目:函数readDat()实现从文件in76.dat中读取字符串到数组xx中。
要求编制函数jsSort()实现:以行为单位把字符串中的所有小写字母o左边的字符串内容移到该串的右边存放,然后 把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,然后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out76.dat中。
in76.dat文本内容:You can create an index on any field
you have the correct record.
out76.dat文本内容:n any fieldYu can create an index
rd.yu have the crrect rec
#include <stdio.h>
#include <string.h>
#include <conio.h>
char xx[1][80];
void jsSort()
{
int i,j,k=0,l,m,n;
char aa[1][80];
for (i=0;i<2;i++)
for (j=strlen(xx[i])-1;j>=0;j--)
if (xx[i][j]=='o'&&k==0) /*将倒数第一个o右边的字符串移到aa左边*/
{k=1;
l=0;m=j+1;n=j;
while(m!=strlen(xx[i]))
{aa[i][l]=xx[i][m];l++;m++;}
m=0;
}
else if(j==0) /*将倒数第一个o左边的字符移到字符串aa的右边*/
{
while(m!=n)
if (xx[i][m]=='o') m++;
else {aa[i][l]=xx[i][m];l++;m++;}
m=0;k=0; /* 到下一行,k必须为0 */
aa[i][l]='\0';
}
for (i=0;i<2;i++) /* 把处理的字符串aa给xx数组 */
for (j=0;j<strlen(xx[i]);j++)
xx[i][j]=aa[i][j];
/* writeDat(); 加入这一句程序运行正常,但主函数不调用绿色的witeDat()*/
}
void main()
{
readDat();
jsSort();
writeDat();
}
readDat()
{
FILE *in;
int i=0;
char *p;
in=fopen("in76.dat","r");
while (i<2&&fgets(xx[i],80,in)!=NULL)
{p=strchr(xx[i],'\n');
if (p) *p=0;
i++;}
fclose(in);
}
writeDat()
{
FILE *out;
int i;
out=fopen("out76.dat","w");
clrscr();
for (i=0;i<2;i++)
{ printf("%s\n",xx[i]); fprintf(out,"%s\n",xx[i]);}
fclose(out);
}
其实质是将倒数第一个o右边的字符串移到左边,左边的字符串移到右边。然后去掉所有o。我的jsSort函数就是这么写的,不过有个问题:主函数不调用writeDat函数,当jsSort为空函数时主函数调用writeDat函数。
只有jsSort函数有问题。
为什么主函数不调用writeDat函数?
jsSort函数结构写得有什么不对?