/*【问题描述】
写一程序将一个文件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);
}
不知道哪里出了错。。。但交上去作业就是错的。。。