7-14 统计英语单词个数
英语王老师正在开发一个英语作文线上系统,需要自动计算文中的单词个数。在最初的版本中,王老师并不打算加入拼写错误检查。因此,连续的英文字母都被认为是一个“单词”,单词之间使用空格或标点符号区分。请你设计一个程序,统计一行英文输入中的单词个数。为了简便算法,已提前去除了文本中的标点符号。因此,输入的文本中只包含单词和空格。
输入格式:
输入一行带有空格的字符(不超过 1000 个字符),以换行符结尾。保证输入的字符中仅包含英文字母(包含大写字母和小写字母)和空格。
输出格式:
输出这行英文字符中单词的个数。
输入样例1:
I love Ningbo
输出样例1:
3
输入样例2:
All C programs do the same thing look at a character and do nothing with it
输出样例2:
16
通过审题,可以联想到要使用isspace函数,即判断当前字符是否为空格的函数
输入时可以用常规的输入方式
while((ch = getchar())!='\n')
先附上一段判断是否为单词的代码:
if (!isspace(ch) && !inword)
{
inword = true;
cnt ++;
}
其中cnt为计数器,初始值为0
inword 初始设置为 false(也可以用int声明为“0”)
当录入非空格字符后,inword设置为true(也可声明为“1”),计数器加一
if (isspace(ch) && inword)
{
inword = false;
}
当遇到空格时,并且inword为true,就将inword重置为false
这个逻辑理解起来并不难,
当首次录入非空格字符时,就将inword(input word)的值设置为true
当一个单词输入完之后,单词与单词之间相隔有空格,当遇到空格时
这时isspace起作用
inword仍然为true
便将inword设置为false,以便下次输入单词时的判定
最后将计数器cnt输出即可
完整通过代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<iomanip>
#include<cmath>
using namespace std;
int main(void)
{
char ch;
bool inword = false;
int cnt = 0;
while((ch = getchar())!='\n'){
if (!isspace(ch) && !inword)
{
inword = true;
cnt ++;
}
if (isspace(ch) && inword)
{
inword = false;
}
}
cout << cnt;
return 0;
}