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

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



目录
相关文章
|
设计模式 Java 应用服务中间件
Tomcat 架构原理解析到设计借鉴
Tomcat 架构原理解析到设计借鉴
421 0
|
Java 应用服务中间件 Nacos
阿里巴巴NACOS(3)- 部署Nacos的生产集群环境
上一篇文章介绍了如何在Spring Cloud中使用Nacos,让我感觉是无缝支持Spring Cloud,可惜的是阿里云的MSE暂时只支持Nacos的服务注册和发现,配置中心还是需要用阿里云的ACM来完成,本文将介绍如何部署Nacos的生产集群环境。
13937 0
阿里巴巴NACOS(3)- 部署Nacos的生产集群环境
|
Java Apache Scala
【阿里云镜像】配置阿里云Maven 镜像
【阿里云镜像】配置阿里云Maven 镜像
24018 1
【阿里云镜像】配置阿里云Maven 镜像
|
10月前
|
边缘计算 人工智能 安全
探索边缘计算:架构、优势及未来趋势
探索边缘计算:架构、优势及未来趋势
|
8月前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
|
数据采集 人工智能 安全
亮数据:数据采集行业痛点的利器
在数据驱动的时代,企业需高效采集大量数据以作出明智决策,但面临IP限制、验证码识别和效率低下的挑战。BrightData应运而生,提供丰富的代理IP资源、高匿名性和稳定性保障,以及智能IP更换策略,有效解决IP限制问题。其创新的亮数据浏览器工具,通过自动化和AI技术,突破复杂网站结构和反数据采集机制,降低抓取成本,提升效率。BrightData的解决方案已在多个行业中发挥作用,助力企业数字化转型。
1804 0
亮数据:数据采集行业痛点的利器
|
数据安全/隐私保护
ensp中基本acl 原理及配置命令(详解)
ensp中基本acl 原理及配置命令(详解)
930 1
|
Shell 开发工具 git
【问题篇】git创建分支后idea切换分支找不到以及合并问题
【问题篇】git创建分支后idea切换分支找不到以及合并问题
700 0
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
64979 3
详解HTTP四种请求:POST、GET、DELETE、PUT
|
存储 Java C++
JVM内存模型和结构详解(五大模型图解)
JVM内存模型和结构详解(五大模型图解)