#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
// 错误思路一:用gets,空间不确定
//int main ()
//{
// char s[100000];
// while (gets(s))
// {
// int n = strlen(s);
// int k = 0;
// int index_i = 0;
// for (int i=0; i<n; i++)
// {
// if (s[i] == ' ' || i == n-1)
// {
// if (s[index_i] >= 'A' && s[index_i] <= 'Z' ||
// s[index_i] >= 'a' && s[index_i] <= 'z')
// {
// k++;
// }
// index_i = i+1;
// }
// }
// cout << k << endl;
// }
// return 0;
//}
//错误思路二:遇到字母且flag标志为false时标记flag为true,
//然后遇到空格或回车且flag为true时算作一个单词,再将flag置为false
//错误原因分析:[由特殊情形导致]:对于and/or 这个正确答案算作是2个单词,而此程序算作1个单词,
//由此把else if (c == ' ')里的内容写到下面的else 里可以AC
//int main ()
//{
// char c;
// bool flag = false;
// int k = 0;
// while ((c = getchar()) != EOF)
// {
// if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
// {
// if (!flag) flag = true;
// }
// else if (c == ' ')
// {
// if (flag)
// {
// k++;
// flag = false;
// }
// }
// else if (c == '\n')
// {
// if (flag)
// {
// k++;
// }
// flag = false;
// cout << k << endl;
// k = 0;
// }
// else
// {
// ;
// }
// }
// return 0;
//}
// 正确思路:遇到第一个字母,且flag为false时算为一个单词(即只要首字符是字母的都算一个单词),其他情况都置false
int main ()
{
char c;
bool flag = false;
int k = 0;
while ((c = getchar()) != EOF)
{
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
{
if (!flag)
{
flag = true;
k++;
}
}
else if (c == '\n')
{
flag = false;
cout << k << endl;
k = 0;
}
else
{
flag = false;
}
}
return 0;
}
UVA 494 Kindergarten Counting Game
最新推荐文章于 2017-05-09 21:32:00 发布