第二篇
一.先贴题目
1031 统计单词个数
Description
写一个函数实现:输入一行字符,以空格分割单词,回车结束输入,输出单词的个数
输入样例
There are many students and many trees!
输出样例
7
二。思路分析
统计单词个数,这个题,首先的思路就是统计空格个数,总单词个数就是空格数加1,但是这样是不太对的,因为句子中两个单词之间可以有n多个空格,因此要去分离空格和单词,就可以获得结果了。基于这一点,可以有两种再细分的方法。
第一种,是循环逐个输入与遍历的时候,遇到空格就count++,然后下一步就可以把空格之后的空格用循环getchar来读取掉。
第二种,是循环遍历整个字符串的时候,只有遇到(字母+空格)的这种组合,再令count++。
三。具体代码实现
第一种:
#include<stdio.h>
int main()
{
int i=0;
int num= 1;
char a;
while((a =getchar())!='\n')
{
if(a == ' ')
{
num++;
while((a=getchar())==' ');
}
}
printf("%d\n",num);
}
第二种:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,t,k,n=1;
char a[100];
gets(a);
i = 0;
while(a[i]!='\0')
{
if(((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A'))&&a[i+1]==' ')
{
n++;
}
i++;
}
printf("%d",n);
return 0;
}
四,再思考
在这道题之后。遇到了跟它有点相似的题目,基本思路是差不多的。
(一.先贴题目)
1081 字符串清除指定子串
由键盘输入一行字符(最多不超过80个字符,以回车结束),要求编程实现删除该行字符中的“bad”(小写),输出处理后的结果(结果不含bad)。
输入格式
一行字符
输出格式
不含“bad”的结果
输入样例
abadnewsisgoodnews,andbadisnotBad
输出样例
anewsisgoodnews,andisnotBad
(二.思路分析)
也和上面一样,不能只考虑只一个bad或者多个bad分离的情况,可以 以含bad为循环条件进行while循环,遇到bad,直接将数组往前移动3位把bad覆盖掉,然后再继续检测有没有bad..这样就可以解决多个bad互相关联的情况了。
(三.具体代码实现)
#include<stdio.h>
#include<string.h>
int main()
{
int i=0;
char a[1000];
char *p;
int len;
gets(a);
len = strlen(a);
while((p=strstr(a,"bad"))!=NULL)
{
for(i=p-a;i<len-2;i++)
{
a[i] = a[i+3];
}
}
puts(a);
}
五.总结反思
其实前面的两道题,当时缠了我很久,我也想了好长一会,现在回看就觉得比较简单,遇到看似简单的问题,有时候是我把问题想得太单调了,测试用例也在迷惑我们,实际上可能有更复杂的情况,所以要有一个基本思路,而不是特定于单一情况下的思路。
这篇博客介绍了统计单词个数的编程问题,分析了两种不同的解题思路,并提供了具体的代码实现。接着,博主分享了处理字符串中删除指定子串的类似问题,同样强调了考虑多种情况的重要性。最后,博主进行了总结反思,认为面对看似简单的题目,应避免思维局限,充分考虑复杂情况。
2665

被折叠的 条评论
为什么被折叠?



