菜鸟求助,求高手解释一下这个程序的算法,谢谢

这个函数,是什么以行为单位一次把字符串中所有小写字母o左边的字符串内容一道该串的右边存放,然后把小写字母o删除.

#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)
{
int i,j,k,index,strl;
char ch;
for(i=0;i<maxline;i++)
{
strl=strlen(xx[i]);
index=strl;
for(j=0;j<strl;j++)
if(xx[i][j]=='o')
{ for(k=j;k<strl-1;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 main()
{
clrscr();
if(ReadDat())
{
printf("数据文件IN.DAT不能打开!\n\007");getch();
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;
clrscr();
fp=fopen("OUT5.DAT","w");
for(i=0;i<maxline;i++)
{
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}

我主要看不懂;STROR函数,

void StrOR(void)
{
int i,j,k,index,strl;
char ch;
for(i=0;i<maxline;i++)
{
strl=strlen(xx[i]);
index=strl;
for(j=0;j<strl;j++)
if(xx[i][j]=='o')
{ for(k=j;k<strl-1;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;
}
}
}
请高手解释一下,尤其是那个strl-1怎么不是strl

非常感谢!
对了,题目给了例题;
you have the correct record.

结果rd.yu have the crrect rec

void StrOR(void)
{
int i,j,k,index,strl;
char ch;
for(i=0;i<maxline;i++)
{
/*
每次从二维数组中读取一行. 并且记录下这一行的字符长度
*/
strl=strlen(xx[i]);
index=strl;
for(j=0;j<strl;j++)
/*
*一个一个字符的检查,如果这个字符等于"o"的话...
*/
if(xx[i][j]=='o')
{
/*
从这个字符开始一直到这个字符串完. 把后一个字符COPY-PAST到当前字符, 这样原来的"o"就被覆盖了.
*/
for(k=j;k<strl-1;k++)
xx[i][k]==xx[i][k+1];
/*
把最后一个字符定为 " " 空
*/
xx[i][strl-1]=' ';
/*
记录下"o"出现的index. 这个循环结束时, INDEX将储存最后一个o的出现地点
*/
index=j;
}
/*
从这个字符串的最后一直到上次出现'o'的地方. 把字符串一个一个再用如上的方法拷贝回去.
*/
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];
/*
把新字符串的起始字符设定为刚才的最后字符. 这就是为什么"rd." 被拿到最前了
*/
xx[i][0]=ch;
}
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答