Description
给定一句话,长度不超过1000,请你看看里面有几个单词,单词均为大小写字母构成,单词间会有一个或多个空格等非字母隔开
Input
只有一个字符串
Output
输出单词的个数
坑点是开头。。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string str;
getline(cin,str);
int flag=0,cnt=0;
for(int i=0;i<str.length();i++)
{
if(str[i]>'z'||str[i]<'A'||(str[i]>'Z'&&str[i]<'a'))
{
flag=0;
}
else if(flag==0)
{
flag=1;
cnt++;//一个单词计数完改flag 遇到空格其他字符会继续变
}
}cout<<cnt<<endl;
return 0;
}
还有一种
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string s;
getline(cin,s);
int cnt=0;
if((s[0]>='a'&&s[0]<='z')||(s[0]>='A'&&s[0]<='Z'))
{
cnt=1;
} else cnt=0;
for(int i=1;i<s.length();i++)
{
if(s[i-1]==' '&&((s[i]>='a'&&s[i]<='z')||s[i]>='A'&&s[i]<='Z'))
{
cnt++;
}
}cout<<cnt<<endl;
return 0;
}
zxy大神的代码
#include<cstdio>
#include<cstring>
#include<cctype>
char s[1005];
int main()
{
fgets(s,sizeof(s),stdin);//fgets()是安全的,因为不会像gets()有溢出的可能。。
int len = strlen(s);
int flag = 1;
int cnt = 0;
for(int i = 0;i < len; ++i)
{
if(isalpha(s[i]))
{
if(flag)
{
cnt++;
flag = 0;
}
}
else flag = 1;
}
printf("%d\n",cnt);
return 0;
}