解题思路:

gets函数的原型是char * gets(char *s);当读取成功的时候返回s,所以这个程序里p的值是和a的值相同的。当gets读取发生错误时返回NULL

while(gets(a))就是只要a能读取成功就一直循环


这样我们就完成了循环的步骤


之后,创建函数,实现出现空格后,把空格后的所有字符向前移一位,从而实现清除空格的效果


不过,需要注意的是,当吧所有字符向前移动一位后,最后一位字符却没有消失

比如:1 2 3 3 4 5 6 7 8 9 把这个数组从第二个3开始向前移动一位

那就是 1 2 3 4 5 6 7 8 9 9  ,就是把后一个赋值给前一个,不过这样的话,最后有一个值是重复的,那就要把最后一个值给设置成结束,也就是'\0'




参考代码:

#include <stdio.h>
#include <string.h>
void fun(char a[])
{
    int i, j;
    for (i = 0; i < strlen(a); i++)
    {
        if (a[i] == ' ')
        {
            for (j = i; j < strlen(a) - 1; j++)
                a[j] = a[j + 1];
            a[j] = '\0';
        }
    }
}
int main()
{
    char a[101];
    while (gets(a))
    {
        fun(a);
        puts(a);
    }
    return 0;
}


点赞(1)
 

0.0分

39 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 20 条评论

荒塘蛙 3年前 回复TA
@菜就多刷题 好像是EOF的意思,我也是稀里糊涂的
黄科大20级网攻刘盼成 3年前 回复TA
@乐业 这个如果有两个连续的空格不是就不行了吗?
乐业 3年前 回复TA
这题用continue行吗?
乔列斯基 3年前 回复TA
@佬饕 把if 改成while就可以了
乔列斯基 3年前 回复TA
@佬饕 厉害啊,这都发现了...
菜就多刷题 3年前 回复TA
都没有结束条件啊,不是要输出“End of file”吗?
四大名猪 3年前 回复TA
多个空格失效的处理方法可以是在“ a[j] = '\0';”这句后面加个“i=i-1”
以诚 3年前 回复TA
#include <stdio.h>
#include <string.h>
void fun(char a[]){
        int j,n,i;
        n=strlen(a);
        for(i=0;i<n;i++)
        {
            if(a[i]==' ')
            {
                for(j=i;j<n-1;j++)
                {
                    a[j]=a[j+1];

                }

            }
        }
        for(i=0;i<n;i++)
        {printf("%c",a[i]);}
        printf("\n");


}
int main(){
      char a[1000];
      while(gets(a))
      {
          fun(a);
          }

}
这为什么错了啊
佬饕 3年前 回复TA
可是有许多连续的空格就失效了
赌书泼墨 3年前 回复TA
谢谢