cpython3


私信TA

用户名:smartZhou

访问量:71631

签 名:

等  级
排  名 36
经  验 12935
参赛次数 1
文章发表 99
年  龄 0
在职情况 学生
学  校
专  业 计算机科学与技术

  自我简介:

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

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

由于输入的是一串长度小于等于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分

18 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#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。
2020-04-16 17:36:23
#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;
}
我这样写为什么出错了?没有输出
2019-11-20 00:39:43
请问解法2怎么体现输入的是 “end of file”的时候结束呢
2019-04-01 20:08:38
  • «
  • 1
  • »