PTA练习 C语言 删除行末空白字符

有少数初学者编程时,没有留意行末多余的空白字符,这不是好的编程习惯。现在请你编写一个函数,把初学者源程序文件中每行末尾多余的空白字符全都删去。

函数原型

// 删除行末空白字符
void Cut(FILE *src, FILE *dst);

说明:参数 src 和 dst 均为文件指针,其中:src 指示初学者的源程序文件,dst 指示整理后的源程序文件。

注:

  • 源程序中所能输入的空白字符仅限于空格符 ' ' (<SP>) 和 制表符 '\t' (<HT>)。
  • 最后一行末尾可能没有换行符。
  • 每一行的长度不限。
  • 在 Unix 或 Linux 系统下,源程序文件每行末尾为一个换行符 '\n' (<LF>),而在 Dos 或 Windows 系统下,源程序文件每行末尾为一个回车符 '\r' (<CR>) 和一个换行符 '\n' (<LF>)。

裁判程序

#include <stdio.h>
#include <ctype.h>
#include <string.h>

// 删除行末空白字符
void Cut(FILE *src, FILE *dst);

int main()
{
    char sname[1024], dname[1024];
    FILE *sfile, *dfile;

    gets(sname);
    gets(dname);

    sfile = fopen(sname, "rb");
    if (!sfile)
    {
        printf("%s 无法打开!\n", sfile);
    }
    dfile = fopen(dname, "wb");
    if (!dfile)
    {
        printf("%s 无法打开!\n", dfile);
    }

    if (sfile && dfile)
    {
        printf("正在整理...");
        Cut(sfile, dfile);
        puts("整理完成!");
    }

    if (sfile)
    {
        fclose(sfile);
    }
    if (dfile)
    {
        fclose(dfile);
    }
    return 0;
}

/* 你提交的代码将被嵌在这里 */

输入样例

old.c
new.c

old.c

...#include...<stdio.h>...
...
...int...main()...
...{...
.......printf("Hello,...world!\n");...
.......return...0;...
...}...

其中:... 表示若干空格符或水平制表符

输出样例

正在整理...整理完成!

new.c

...#include...<stdio.h>

...int...main()
...{
.......printf("Hello,...world!\n");
.......return...0;
...}

  不明白我写的代码问题出在哪

void Cut(FILE *src, FILE *dst)
{
    char now;
    int i,k,j,s=0;
    while((now=fgetc(src))!=-1){
    	fseek(src,-1,SEEK_CUR);
		i=0,j=0;
        do{
            now=fgetc(src);
            i++;
            s++;
        }while(now!='\n');
        fseek(src,-3,SEEK_CUR);
        do{
            now=fgetc(src);
            fseek(src,-2,SEEK_CUR);
            j++;
        }while(now==' '||now=='\t');
        j--;
		fseek(src,-(i-j-4),SEEK_CUR);
		if((now=fgetc(src))==-1){
			rewind(src);
			fseek(src,s-i,SEEK_CUR);
		}
		else
			fseek(src,-1,SEEK_CUR);
        for(k=0;k<(i-j-2);k++){
            now=fgetc(src);
            fputc(now,dst);
        }
        fputc('\n',dst);
        fseek(src,j+2,SEEK_CUR);
    }
}

求大佬指点!

要判断分号吧,分号后面的空格才是多余的空格

可以尝试一下用fputs解决,思路会清晰很多的,我是这样编出来的

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html