题目-统计一行文本的单词个数
编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
具体分析和代码
方法一:字符数组
cin.get()函数:把从键盘上输入的每一个字符,包括空格符和回车符等分隔符都作为一个输入字符赋给字符型变量。
采用字符数组 s[ ] 接收全部的输入字符,再对该字符数组进行统计。
从第一个输入字符开始扫描,当扫描到第一个非空字符时,可认为输入行中至少有一个单词,赋值 count = 1;
从第一个非空字符开始统计,若空格后紧接着非空字符时,代表后面还有单词,count+1
1 //输入完毕后再统计 2 #include<iostream> 3 using namespace std; 4 5 int main() 6 { 7 char s[1000]; //接收字符的数组 8 int i=0, count(0); //i为输入的字符总数(包含空格),count用于计数 9 cin.get(s[i]); 10 while(s[i]!=' '){ 11 i++; 12 cin.get(s[i]); 13 } 14 //cout << i << endl; 检验 15 int t = 0; //t用于记录第一个非空字符的位置下标 16 for(int j=0; j<=i; j++) 17 { 18 //cout<<s[j]; 19 if(s[j]>='a'&&s[j]<='z' || s[j]>='A'&&s[j]<='Z' || s[j]>='0'&&s[j]<='9'){ 20 count = 1; 21 t = j; 22 break; 23 } 24 } 25 //cout << t << endl;检验 26 for(int j=t; j<i; j++) 27 { //当空格后接非空字符时,单词数+1 28 if(s[j]==' ' && s[j+1]!=' '){ 29 count++; 30 } 31 } 32 cout << count << endl; 33 34 return 0; 35 }
方法二:一边输入字符一边统计单词
一个单词开始 = 输入非空字符;一个单词结束 = 输入空格或者换行符
从输入第一个字符开始,分情况讨论下一步:
(1)是换行符,输入结束,退出循环;
(2)是空格,继续,直到输入非空字符;
(3)是非空字符,即为单词开始,统计值 count++,进入单词输入子循环,继续输入字符,直到输入空格或换行符时,即输完一个单词;
1 //边输入边统计,输入完即得出统计结果 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char a; 8 int count=0; 9 10 while(1){ 11 cin.get(a); 12 if(a==' '){ //输入回车代表结束循环,得出结果 13 break; 14 } 15 else if(a!=' ') 16 { // 不为空格且满足下面条件的就为一个单词开始 17 if(a>='a'&&a<='z'||a>='A'&&a<='Z'||a>='0'&&a<='9') { 18 count++; 19 } 20 while(1){ 21 cin.get(a); 22 if(a==' '||a==' '){ //读到空格或者回车代表这个单词输入完毕 23 break; 24 } 25 } 26 if(a==' '){ 27 break;//换行符是一行输入结束的标志 28 } 29 } 30 } 31 32 cout << count; 33 return 0; 34 }