云墨墨 2017-06-03 07:31 采纳率: 0%
浏览 2608

关于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 2017-06-03 11:24
    关注

    fgets can only get one line in a file.

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况