---------------------------------------解法一 ----------------------------------------------

解题思路:
其实本题思路很简单,代码很简短,易理解。

由于输入的是一串长度小于等于80的字符串,字符串即是一串字符。所以:

1)定义一个字符

    char ch;


2)不断输入单个字符:

while((ch=getchar())!=EOF)


3)每输入一次全局计数器g_count加1:

    ++g_count


4)当输入的不是空格,即

    ch != ' ' 或者ch !=32(空格的ASCII是32)

     直接输出该字符

    putchar(ch)。


5)当g_count超过80时,直接跳出while循环。

注意事项:
注意长度。可以用全局计数器统计字符个数。


参考代码:

#include <stdio.h>
int g_count=0;
int main()
{
	char ch;
	while((ch=getchar())!=EOF&&++g_count)
	{
		if(g_count>=80)   break;
		if(ch!=32)        putchar(ch);
	}
	return 0;
 }

---------------------------------解法二--------------------------------

解题思路:

定义一个长度为80的字符数组。

使用gets输入

不是空格就输出好了。


注意事项:

我在使用此方法去求解本题时,开始结果不正确,然后我发现本题是进行多选测试。而不仅仅是单行数据测试。所以要用while(gets(array))。


还应该记得每测试完一组数据都要换行:

putchar('\n')  


参考代码:

#include <stdio.h>
#include <string.h>
int main()
{
		int i;
		char array[80];
		while(gets(array))
		{
			for(i=0; i<strlen(array); i++)
			{
				if(array[i]!=32)
				putchar(array[i]);
			}
			putchar('\n');
		}
	return 0;
}


-------------------------------------解法三----------------------------

解题思路:

可以把符合条件的存入另一个中间媒介,然后把这个中间媒介输出。


注意事项:

记住每次临时字符数组temp要内存清空:

memset(temp,0,sizeof(temp));


#include <stdio.h>
#include <string.h>
int main()
{
		int i;
		char array[80],temp[80];
		while(gets(array))
		{
			int j=0;
			for(i=0; i<strlen(array); i++)
			{
				if(array[i]!=32)
				temp[j++]=array[i];
			}
			puts(temp);
			memset(temp,0,sizeof(temp));  
		}
	    return 0;
}


测试环境:

Windows 10 Source Insight 4.0 & Ubuntu/ Kali Debian Linux 


总结: 本题的求解方法很多,例如利用C++ string类库也能轻松求解, 后面不一 一举例了。总有一款方法适合你。


点赞(8)
 

0.0分

18 人评分

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

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

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

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

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

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

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

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

评论列表 共有 6 条评论

IRONMAN 4年前 回复TA
#include<stdio.h> 
int main(){
	char arr[80],res[10][80];
	int count=0,i,k;
	while(1){
		gets(arr);
		k = 0;
		for(i=0;arr[i]!='\0';i++){
			if(arr[i]!=' ')
				res[count][k++] = arr[i];
		}
		res[count][k] = '\0';
		if(i==0) break;
		count++;
	}
	for(i=0;i<count;i++){
		printf("%s\n",res[i]);
	}
	return 0;
}

求教大佬,哪里出错了?错误提示:Runtime Error:Segmentation fault。
墨魍 4年前 回复TA
@墨魍 ...没看到。。。谢谢
dragonZhan 4年前 回复TA
@墨魍 很明显你if里面的=有问题,其次else没必要,改一下一个if就可以完成
墨魍 5年前 回复TA
#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
int main(void)
{
	char arr[100];
	int i = 0;
	for (i; i < 100; i++)
	{
		if (getchar() != EOF)
			arr[i] = getchar();
		else
			break;
	}
	int leng = strlen(arr);
	for (int j = 0; j < leng; j++)
	{
		if (arr[j] = ' ')
			continue;
		else
			printf("%c", arr[j]);
	}
	return 0;
}
我这样写为什么出错了?没有输出
酷酷流浪猫 5年前 回复TA
@胖胖 end of flie就是EOF,文件结束的意思;ctrl+z+回车可以打出来;gets()没有得到数据返回0,循环结束
胖胖 5年前 回复TA
请问解法2怎么体现输入的是 “end of file”的时候结束呢