---------------------------------------解法一 ----------------------------------------------
解题思路:
其实本题思路很简单,代码很简短,易理解。
由于输入的是一串长度小于等于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类库也能轻松求解, 后面不一 一举例了。总有一款方法适合你。
0.0分
19 人评分
#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。
#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; } 我这样写为什么出错了?没有输出
dragonZhan 2020-02-13 12:13:20 |
很明显你if里面的=有问题,其次else没必要,改一下一个if就可以完成
墨魍 2020-02-14 00:21:37 |
...没看到。。。谢谢
请问解法2怎么体现输入的是 “end of file”的时候结束呢
酷酷流浪猫 2019-09-30 13:19:02 |
end of flie就是EOF,文件结束的意思;ctrl+z+回车可以打出来;gets()没有得到数据返回0,循环结束
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:875 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:695 |
C语言训练-数字母 (C语言代码)浏览:610 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:783 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:539 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:651 |
C语言训练-数字母 (C语言代码)浏览:648 |
核桃的数量 (C语言代码)浏览:726 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:904 |
简单的a+b (C语言代码)浏览:1024 |