C语言语句解释,高手请进!

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

结果: a any filed. Yu can create an index.
rd. Yu have the crrect rec

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标调符号和空格。
注意:部分、源程序已经给出。

#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;
+ char buf[80];
+ for (i=0; i<maxline; i++)
+ {
+ j = strlen(xx[i])-1;
+ while (xx[i][j]!='o' && j>=0)
+ j--;
+ if (j < 0)
+ continue;
+ xx[i][j] = 0;
+ strcpy(bu

一行一行处理
先找最右一个o,处理最右段
然后从行首起找o,找到一段,添到前一次处理好的右边
一直找到第一次找到的o的地方

+ int i, j, k; // 声明 循环控制变量,下标
+ char buf[80]; // 存放处理好的一行字符,行宽不超过80字符。
+ for (i=0; i<maxline; i++) // 对行循环,一次做一行。
+ { // 行循环体开始。
+ j = strlen(xx[i])-1; // 本行长度减1,j 指向最后一个字符
+ while (xx[i][j]!='o' && j>=0)
+ j--; // 从行尾向行首一个一个字符找o,一旦遇到o就停。
+ if (j < 0)
+ continue; // 空行,或没遇到o,终止这次 i 循环,做下一个i循环

+ xx[i][j] = 0; // 找到的o单元赋0,就是“假"(false)
+ strcpy(buf, &xx[i][j+1]); // 把o单元右边字符串考到放成果的buf[80]里
+ k = j = 0; // 现在改从行首找 o

+ while (xx[i][j]) // 有字符就是真,就循环
+ {
+ while (xx[i][j]!='o' && xx[i][j])
+ j++; // 从行首直到找到1个o
+ if (!xx[i][j]) // xx[i][j] 为零--“假"(false)进入
+ {
+ strcat(buf, &xx[i][k]); // 添到成果里,接在右边
+ break; // 结束
+ }
+ xx[i][j] = 0; // 清 0 (删o)
+ strcat(buf, &xx[i][k]); // 添到成果里,未结束
+ j++; // 找下一段
+ k = j;
+ }
+ st