一道三级编程题

来源:百度知道 编辑:UC知道 时间:2024/05/30 05:33:28
第66套
函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR( ),其函数的功能是:以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。
例如:原文:n any field.Yu can create an index
you have the correct record.
结果:n any field. Yu can create an index
rd. yu have the crrect rec

void StrOR(void)
{
int i,j,k;
int index,str;
char ch;
for(i=0;i<maxline;i++)
{
str=strlen(xx[i]);
index=str;
for(j=0;j<str;j++)
if(xx[i][j]=='o')
{
for(k=j;k<str-1;k++)
xx[i][k]=xx[i][k+1];
xx[i][str-1]=' ';
index=j;
}
for(j=str-1;j>=index;j--)
{
ch=xx[i][str-1];
for(k=str-1;k>0;k--)
xx[i][k]=xx[i][k-1];
xx[i][0]=ch;
}
}
}

index=str;为什么要定义这一行呢?

fo

index=str;为什么要定义这一行呢?
初值,等于这行字符串长度。

for(j=0;j<str;j++)
if(xx[i][j]=='o') {
for(k=j;k<str-1;k++)
}
双重循环,k<str-1 因为 下标 k 要加 1:
xx[i][k]=xx[i][k+1]; 向左推1位。
最后1个字符 下标 k+1 不能超界

xx[i][str-1]=' '; 最后1个字符 给空白,是删除。

因为
if(xx[i][j]=='o') {
...; // 循环句完毕
xx[i][str-1]=' '; // 删除完毕
index=j; // 记录 j
}
不看前面两句,就是 if(xx[i][j]=='o') index=j;
当然记录最后一个o所在的位置 j 了。

void StrOR(void)
{
int i,j,k;
int index,str; /*index是记录'o'的位置的,str是第i行的长度*/
char ch;
for(i=0;i<maxline;i++)
{
str=strlen(xx[i]); /*计算XX[i]数组的长度(字符串的第i行的长度)并赋给变量str*/

index=str; /*再把XX[i]数组的长度赋给index,
目的是:先假设‘o'的位置是str最后一个*/

for(j=0;j<str;j++)
if(xx[i][j]=='o') /*如果第i行的第j个字符为'o'*/
{
for(k=j;k&l