一道c语言编程题 !高手们帮忙解释一下Strmove()函数部分!!O(∩_∩)O谢谢~~~~~~~
函数RData()实现从文件IN.dat中读取一篇英文文章存入字符串数组StrResult中;请编写Strmove()函数,其功能是:以行为单位,依次把字符串中所有小写字...
函数RData()实现从文件IN.dat中读取一篇英文文章存入字符串数组StrResult中;请编写Strmove()函数,其功能是:以行为单位,依次把字符串中所有小写字母"o"左边的字符串内容移到该字符串的右边存放,然后把小写字母"o"删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组StrResult中。最后main()函数调用函数WData(),把结果StrResult输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
例如,原文:n any field.Yu can create an index
you have the corlrectrecord.
结果:n any field.Yu can create an index
rd.yu have the crlrectrec
注意:部分源程序已经给出。请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
char StrResult[50][80];
int maxline = 0; /* 文章的总行数 */
int RData(void);
void WData(void);
void Strmove(void)
{ int i, j, k;
char buf[80];
for (i=0; i<maxline; i++)
{ j = strlen(StrResult[i])-1;
while (StrResult[i][j]!='o' && j>=0)
j--;
if (j < 0)
continue;
StrResult[i][j] = 0;
strcpy(buf, &StrResult[i][j+1]);
k = j = 0;
while (StrResult[i][j])
{ while (StrResult[i][j]!='o' && StrResult[i][j])
j++;
if (!StrResult[i][j])
{ strcat(buf, &StrResult[i][k]);
break;
}
StrResult[i][j] = 0;
strcat(buf, &StrResult[i][k]);
j++;
k = j;
}
strcpy(StrResult[i], buf);
}
}
void main()
{ if (RData())
{ printf("数据文件IN.dat不能打开!\n\007");
return;
}
Strmove();
WData();
}
int RData(void)
{ FILE *fp;
int i = 0;
char *p;
if ((fp = fopen("IN.dat", "r")) == NULL)
return 1;
while (fgets(StrResult[i], 80, fp) != NULL)
{ p = strchr(StrResult[i], '\n');
if (p)
*p = 0;
i++;
}
maxline = i;
fclose(fp);
return 0;
}
void WData(void)
{ FILE *fp;
int i;
fp = fopen("OUT.dat", "w");
for (i=0; i<maxline; i++)
{ printf("%s\n", StrResult[i]);
fprintf(fp, "%s\n", StrResult[i]);
}
fclose(fp);
}
这是一道三级网络技术上机题!! 展开
例如,原文:n any field.Yu can create an index
you have the corlrectrecord.
结果:n any field.Yu can create an index
rd.yu have the crlrectrec
注意:部分源程序已经给出。请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
char StrResult[50][80];
int maxline = 0; /* 文章的总行数 */
int RData(void);
void WData(void);
void Strmove(void)
{ int i, j, k;
char buf[80];
for (i=0; i<maxline; i++)
{ j = strlen(StrResult[i])-1;
while (StrResult[i][j]!='o' && j>=0)
j--;
if (j < 0)
continue;
StrResult[i][j] = 0;
strcpy(buf, &StrResult[i][j+1]);
k = j = 0;
while (StrResult[i][j])
{ while (StrResult[i][j]!='o' && StrResult[i][j])
j++;
if (!StrResult[i][j])
{ strcat(buf, &StrResult[i][k]);
break;
}
StrResult[i][j] = 0;
strcat(buf, &StrResult[i][k]);
j++;
k = j;
}
strcpy(StrResult[i], buf);
}
}
void main()
{ if (RData())
{ printf("数据文件IN.dat不能打开!\n\007");
return;
}
Strmove();
WData();
}
int RData(void)
{ FILE *fp;
int i = 0;
char *p;
if ((fp = fopen("IN.dat", "r")) == NULL)
return 1;
while (fgets(StrResult[i], 80, fp) != NULL)
{ p = strchr(StrResult[i], '\n');
if (p)
*p = 0;
i++;
}
maxline = i;
fclose(fp);
return 0;
}
void WData(void)
{ FILE *fp;
int i;
fp = fopen("OUT.dat", "w");
for (i=0; i<maxline; i++)
{ printf("%s\n", StrResult[i]);
fprintf(fp, "%s\n", StrResult[i]);
}
fclose(fp);
}
这是一道三级网络技术上机题!! 展开
1个回答
展开全部
其实你可以用vc调试一下,走一遍你就知道怎么个流程了.
void Strmove(void)
{
int i, j, k;
char buf[80];
for (i=0; i<maxline; i++) //maxline 是从IN.DAT中读取字符串的行数
{
j = strlen(StrResult[i])-1; // j= 字符串的长度 -1
while (StrResult[i][j]!='o' && j>=0) // 循环 从后往前找到 StrResult[i]字符串中的'o'
j--;
if (j < 0) //当上个循环结束,j如果小于0,证明本字符串中没有'o',就跳到maxline那个主循环
continue;
StrResult[i][j] = 0; //程序走到这,证明StrResult[i][j]='o'所以把StrResult[i][j]置0
strcpy(buf, &StrResult[i][j+1]); //把'o'后面的字符拷到buf里
k = j = 0;
while (StrResult[i][j])
{ while (StrResult[i][j]!='o' && StrResult[i][j]) //继续找'o' 或者 到这句结束
j++;
if (!StrResult[i][j]) //如果这句话结束,就把strresult[i]接到buf后,然后跳出本次循环
{
strcat(buf, &StrResult[i][k]);
break;
}
StrResult[i][j] = 0; //如果找到'o',再把找到的'o'置0
strcat(buf, &StrResult[i][k]); //把上次'o'后到这次找到的'o'之间的字符拷到buf的后面
j++;
k = j; //k是上个找到的'o'的后一个字符
}
strcpy(StrResult[i], buf); //最后,把buf拷回StrResult中.
}
}
void Strmove(void)
{
int i, j, k;
char buf[80];
for (i=0; i<maxline; i++) //maxline 是从IN.DAT中读取字符串的行数
{
j = strlen(StrResult[i])-1; // j= 字符串的长度 -1
while (StrResult[i][j]!='o' && j>=0) // 循环 从后往前找到 StrResult[i]字符串中的'o'
j--;
if (j < 0) //当上个循环结束,j如果小于0,证明本字符串中没有'o',就跳到maxline那个主循环
continue;
StrResult[i][j] = 0; //程序走到这,证明StrResult[i][j]='o'所以把StrResult[i][j]置0
strcpy(buf, &StrResult[i][j+1]); //把'o'后面的字符拷到buf里
k = j = 0;
while (StrResult[i][j])
{ while (StrResult[i][j]!='o' && StrResult[i][j]) //继续找'o' 或者 到这句结束
j++;
if (!StrResult[i][j]) //如果这句话结束,就把strresult[i]接到buf后,然后跳出本次循环
{
strcat(buf, &StrResult[i][k]);
break;
}
StrResult[i][j] = 0; //如果找到'o',再把找到的'o'置0
strcat(buf, &StrResult[i][k]); //把上次'o'后到这次找到的'o'之间的字符拷到buf的后面
j++;
k = j; //k是上个找到的'o'的后一个字符
}
strcpy(StrResult[i], buf); //最后,把buf拷回StrResult中.
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询