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

简介: 【题目】输入一行字符,统计其中有多少个单词,每两个单词之间以空格隔开。如输入: This is a c++ program. 输出:There are 5 words in the line.  【本讲结构】 (一)讲解视频 (二)相关习题 (三)视频中的代码 (四)其他写法的代码 【正文】 (一)讲解视频(点下面的图标) 针对一个刚读入的符号如何判断? 读

【题目】输入一行字符,统计其中有多少个单词,每两个单词之间以空格隔开。如输入: 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;   
}  



目录
相关文章
|
机器学习/深度学习 存储 算法
《探秘NAS:卷积神经网络的架构革新之路》
神经架构搜索(NAS)在卷积神经网络(CNN)领域掀起革新,自动化生成最优架构,改变传统设计方式。其特点包括扩展搜索空间、优化搜索策略、提升性能、模型压缩及跨领域应用。NAS发现了超越人工设计的高性能架构,如EfficientNet,并在图像分类、目标检测和分割中取得显著成果。尽管面临计算资源消耗大和可解释性差的挑战,NAS仍为CNN的发展带来重大突破,推动深度学习广泛应用。
470 12
|
Java 数据库连接 API
Seata异常捕获问题之回滚事务如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
1044 106
|
数据采集 API 开发者
爬虫:闲鱼商品详情数据接口(goodfish.item_get)
闲鱼的`goodfish.item_get`非官方API,其数据接口多为私有,适用于授权合作伙伴。获取商品详情数据可考虑官方合作、网络爬虫(需遵守反爬政策)、第三方API服务或直接联系闲鱼官方。合法合规使用数据至关重要。
1761 0
|
Python
一文读懂使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
一文读懂使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
1286 0
|
搜索推荐 UED 开发者
谈谈你对移动应用中的推送通知的理解。
【4月更文挑战第1天】推送通知是移动应用的关键功能,实现即时信息传递、个性化定制、互动操作及用户可配置的接收选项。通过分析用户响应优化推送策略,提升用户参与和应用活跃度,但也需谨慎使用,以免打扰用户体验。
656 0
|
SQL 数据库
源码解析Seata AT模式中分支事务的提交或回滚是如何被触发的
源码解析Seata AT模式中分支事务的提交或回滚是如何被触发的
637 0
源码解析Seata AT模式中分支事务的提交或回滚是如何被触发的
|
C语言 算法 开发工具
带你读《C语言程序设计教程 第4版》之一:C语言概述
本书介绍利用C语言进行程序设计的基本知识。每章配有大量的习题,便于读者巩固所学知识,掌握程序设计的基本方法和编程技巧。

热门文章

最新文章