sinat_36905681
云墨墨
采纳率0%
2017-06-03 07:31 阅读 2.5k

关于C语言字符替换的问题

/*【问题描述】
写一程序将一个文件fcopy.in拷贝至另一个文件fcopy.out, 其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符, 其它字符不变。
【输入形式】
源文件名和目标文件名分别为fcopy.in和fcopy.out,程序将从当前目录下读取fcopy.in文件。
【输出形式】
将fcopy.in文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。
【输入样例】
假如文件fcopy.in中内容如下:
Alcatel provides end-to-end solutions.
【输出样例】
输出文件fcopy.out中内容为:
Alcatel provides end-to-end solutions.
【样例说明】
将文件fcopy.in拷贝到fcopy.out,同时做适当的转换。
【评分标准】
其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它字符不变,完全符合要求得20分,每个测试点4分。提交程序名为copy.c。

*/

#include
#include
#include
#include
#define N 100
void Fgets(char *s,FILE *p);
void DelSpacce(char *s1,char *s2);
void Fputs(char *s2,FILE *fp);
int main()
{
char s1[N],s2[N];
FILE *fp;
fp=fopen("fcopy.in","r");
Fgets(s1,fp);
//puts(s1);
DelSpacce(s1,s2);

strcpy(s2,s1);
fp=fopen("fcopy.out","w");
Fputs(s2,fp);
//puts(s2);
return 0;

}
void Fgets(char *s,FILE *fp)
{
if(fp==NULL)
{
printf("Failure to open fcopy.in!");
return;
}
fgets(s,N,fp);
fclose(fp);
return;
}
void DelSpacce(char *s1,char *s2)
{
int i,j;
for(i=0;s1[i]!=0;i++)
{
if(isspace(s1[i]))
{
strcpy(&s2[i]," ");
j=i+1;
while(isspace(s1[j]))
{
strcpy(&s1[j],&s1[j+1]);
}
}else
{
strcpy(&s2[i],&s1[i]);
}

}

}
void Fputs(char *s2,FILE *fp)
{
if(fp==NULL)
{
printf("Failure to open fcopy.out!");
return;
}
fputs(s2,fp);
fclose(fp);
}

不知道哪里出了错。。。但交上去作业就是错的。。。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • SuperKilling SuperKilling 2017-06-03 11:24

    fgets can only get one line in a file.

    点赞 评论 复制链接分享
  • sinat_36905681 云墨墨 2017-06-04 11:17

    哦哦,忘记考虑啦。但是交作业里面给的都是单句话没有换行,然而也是错的。

    点赞 评论 复制链接分享
  • SuperKilling SuperKilling 2017-06-05 15:09

    I've test a simple case with .txt file, but not a .in and .out file. It run OK, although your code is redundant and not safe.图片说明

    点赞 评论 复制链接分享

相关推荐