思路:根据变换来判断是否是一个单词,如果当前字符是字母下一个是空格,那么这就是一个单词,或者当前是空格下一个是字母,也是一个单词。
输入的字符串有三种情况:
①句子最前面有空格
②句子最前最后都没有空格
③句子最后有空格
对于当前字符是字母下一个是空格来统计,对于测试点来说,需要分两种情况讨论,结尾是否有空格
对于当前是空格下一个是单词,只需要分两种情况讨论,开头是否有空格
Description
从键盘输入一行字符(长度小于100),统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。
Input
输入只有一行句子。仅有空格和英文字母构成。
Output
单词的个数。
Sample
Input
stable marriage problem Consists of Matching members
Output
7
讨论最前面的情况
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
char a[101];
int cnt,n;
int main()
{
cin.getline(a,101);
n=strlen(a);
for(int i=0; i<n-1; i++)//i不能指到最后一个字符
{
if(a[i]==' '&&a[i+1]!=' ')//如果前一个字符是空格,下一个字符不是那么单词数+1.
{
cnt++;
}
}
if(a[0]==' ')//开头是空格,直接输出即可
{
printf("%d\n",cnt);
}
else
{
printf("%d\n",cnt+1);//开头不是空格,漏掉了第一个单词,所以+1
}
return 0;
}
或者讨论最后
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <stdio.h>
using namespace std;
char str[101];
int main()
{
int cnt=0,i;
cin.getline(str,102);
for(i=0; str[i]!='\0'; i++)
{
if(str[i]!=' '&&str[i+1]==' ')
{
cnt++;
}
}
if(str[i-1]==' ')
{
printf("%d\n",cnt);
}
else
{
printf("%d\n",cnt+1);
}
return 0;
}