题解
单词数
1 条题解
-
0
解题思路
题目让我们统计一段英文里有多少个单词。这一段英文里,单词之间用空格、逗号或者句号隔开。
什么是单词呢?一个单词就是连续的一串字母。所以我们只要数一数,这段英文里有多少段“连续的字母”。
我们可以用一个“开关”变量
inWord来帮忙:inWord = true表示现在正处在一个单词里面;inWord = false表示现在在单词外面(在空格、逗号或句号上)。
从头到尾扫描每个字符:
- 如果是字母(大小写都算),说明我们来到了一个单词里。如果之前不在单词里(
inWord == false),说明这是一个新单词的开头,单词数加 1,并把inWord改成true。 - 如果不是字母(是空格、逗号或句号),说明单词结束了,把
inWord改成false。
这样,每个单词只有在它的开头被数到一次,正好得到单词总数。
怎么判断字母?用两个条件组合:
c>='a' && c<='z'(小写)或者c>='A' && c<='Z'(大写)。拿样例
Hello everyone,welcome to code.来说:Hello、everyone、welcome、to、code共 5 个单词。参考代码
// 用途:统计一段英文中的单词个数 #include <iostream> #include <string> using namespace std; int main(){ string s; getline(cin,s); // 一段英文可能很长,用getline读整行 int cnt=0; bool inWord=false; // 标记当前是否处在一个单词内 for(char c:s){ bool isLetter = (c>='a'&&c<='z')||(c>='A'&&c<='Z'); if(isLetter){ // 从非字母进入字母,说明一个新单词开始了 if(!inWord){ cnt++; inWord=true; } } else inWord=false; // 遇到分隔符(空格/逗号/句号)退出单词 } cout<<cnt<<endl; return 0; }复杂度分析
- 时间:把这段英文从头到尾扫描一遍,时间复杂度是 O(n),n 是英文长度(不超过 200)。
- 空间:只用一个字符串和一个布尔变量,空间复杂度是 O(1)。
- 1