现在的位置: 首页 > 综合 > 正文

题解:统计字符串中单词数目

2013年06月02日 ⁄ 综合 ⁄ 共 1721字 ⁄ 字号 评论关闭

【题目】输入一行字符,统计其中有多少个单词,每两个单词之间以空格隔开。如输入: This is a c++ program. 输出:There are 5 words in the line. 

【本讲结构】

(一)讲解视频

(二)相关习题

(三)视频中的代码

(四)其他写法的代码

【正文】

(一)讲解视频(点下面的图标)

针对一个刚读入的符号如何判断?

  • 读下一个符号ch;
  • 如果ch是空格,表示现在不构成单词,什么操作都不做,继续读下一个符号ch;
  • 如果ch不是空格
    • 如果,在此之前读到的不是单词,则现在是读单词的开始,单词数增1
    • 如果,在此之前正在读单词,现在的符号不构成新单词,继续读符号;

(二)相关习题

1. 输入一行字符构成的英文句子,分离出其中的每一个单词。【提示:(1)将正在分离出的单词存放到数组中,分离一个输出一个;或(2)将分离出的单词存入一个二维数组,完全处理完后再输出。】

2. 输入一行字符,统计其中有多少个单词。每两个单词之间以空格(可能多个)隔开,或者由标点符号(只考虑 , . ; ? !共5种)隔开。 如输入: How old are your?  I am   20. 输出:There are 7 words in the line. 

3. 所谓规范的文本是指:行首的第一个字符不能是空格;两个单词间只能有1个空格且必须有1个空格;标点符号前面是单词中的最后一个字母,后面有且只能有一个空格。

题目要求:输入一行字符,将其整理为规范的文本并输出。标点符号只考虑 , . ; ? !共5种。

如输入:“    How  old    are your?   I am   20.It is too old.  ”输出::“How old are your? I am 20. It is too old.”

处理后结果解读:即要求输出的文本开头无前导空格,两个单词间如果有多个空格时只保留1个,标点符号后没有空格时,要加上1个。

提示:可以设置另一个字符数组,逐个检查输入的字符数组,保留的字符复制过去,多余的空格不复制,增加需要补充的空格。当然也可以直接在原字符数组上做。

(三)视频中的代码

初始的程序:

#include <iostream>  
using namespace std;  
int main()  
{ 
	char str[81],ch;    
	int i=0,num=0;
	bool isWord=false;   
	gets(str);
	ch=str[i];
	while(ch!='\0')
	{
		if (ch==' ') isWord=false;     
		else if (isWord==false)                
			isWord=true,num++; 
		++i;
		ch=str[i];
	}
	cout<<"there are "<<num<<" words in the line"<<endl; 
	return 0;
}  

不用ch变量的写法,这在C++中很常见:

#include <iostream>  
using namespace std;  
int main()  
{ 
	char str[81],ch;    
	int i=0,num=0;
	bool isWord=false;   
	gets(str);
	ch=str[i];
	while(str[i]!='\0')
	{
		if (str[i]==' ') isWord=false;     
		else if (isWord==false)
		{                
			isWord=true;
			num++;
     		} 
		++i;
	}
	cout<<"there are "<<num<<" words in the line"<<endl; 
	return 0;
}  

(四)其他写法的代码

#include <iostream>  
using namespace std;  
void main()  
{ 
	char string[81];    
	int i,num=0,word=0;   
	gets(string);           
	for(i=0;(string[i]!='\0');i++)  //for循环中的结束条件  
		if (string[i]==' ') word=0;  //word=0相当于上面的isWord=false,实际是用整型代替布尔型。用布尔型更清晰些,但用整型对C++程序员也不见怪
		else if (word==0)  //word==0可换为!word,C++程序员要适应这种写法              
			word=1,num++;             
		cout<<"there are "<<num<<" words in the line"<<endl;   
}  

抱歉!评论已关闭.