统计语句中的最长最短单词

已知 string sentence="We were her pride of 10 she named us: Benjamin, Phoenix, the Pordigal and perspicacious pacific Suzanne.";
编写程序,计算sentence中有多少个单次,并指出其中最长和最短的单词,如果有多个,则将它们全部输出

使用find_first_of 和find_first_not_of,寻找到单词的起始位置;
使用vector存放最长和最短单词:通过贪心算法,寻找“最**”单词

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main(){
	string sentence="We were her pride of 10 she named us: Benjamin, Phoenix, the Pordigal and perspicacious abcdefghijklmnopqrstuvwxyz pacific Suzanne.";

	string separators="\t\f\r\n\v:,. ";//作为分隔符

	string::size_type maxLen,minLen,wordLen,count=0;

	string word;

	vector<string> longestWords, shortestWords;

	string::size_type startPos=0,endPos=0;

	while( (startPos=sentence.find_first_not_of(separators,endPos) ) !=string::npos){/**//**//**//**//**//**//**//**//**//**/	//npos是一个常数,用来表示不存在的位置
		++count;

    //////////////////////////////////////////////////////////////////////////////////////////

		//找到下一个单词的结束位置
		endPos=sentence.find_first_of(separators,startPos);

		//若找不到下一个分隔符,则说明该单词为最后一个单词
		if(endPos==string::npos){
			wordLen=sentence.size()-startPos;
		}
		else{
			wordLen=endPos-startPos;
		}

		//注意这里不要是sentence.begin()+endPos;有可能endPos为string::npos;
		//word.assign(sentence.begin()+startPos, sentence.begin()+startPos+wordLen);
		word=sentence.substr(startPos, wordLen);//从startPos开始,wordLen个字母构成的子串

    /////////////////////////////////////////////////////////////////////////////////////

		if(count==1){
			longestWords.push_back(word);
			shortestWords.push_back(word);
			maxLen=minLen=wordLen;
		}else{
			if(wordLen>maxLen){
				longestWords.clear();
				longestWords.push_back(word);
				maxLen=wordLen;
			}else if(wordLen==maxLen){
				longestWords.push_back(word);
			}

			if(wordLen<minLen){
				shortestWords.clear();
				shortestWords.push_back(word);
				minLen=wordLen;
			}else if(wordLen==minLen){
				shortestWords.push_back(word);
			}

		}// end of else

	}//end of while

	//输出单词数目
	cout<< "word amount: "<< count <<endl;
	vector<string>::iterator iter;

	//输出最长单词
	cout<< "longest words: "<<endl;
	iter=longestWords.begin();

	while( iter!=longestWords.end()  )
		cout<< *iter++ <<endl;

	//输出最短单词
	cout<< "shortest words: "<<endl;
	iter=shortestWords.begin();

	while(iter!=shortestWords.end())
		cout<< *iter++ <<endl;

	return 0;
}

  

统计语句中的最长最短单词

时间: 2024-12-13 21:15:15

统计语句中的最长最短单词的相关文章

最长最短单词

21:最长最短单词    总时间限制:1000ms  内存限制:65536kB描述    输入1行句子(不多于200个单词,每个单词长度不超过100),    只包含字母.空格和逗号.单词由至少一个连续的字母构成,    空格和逗号都是单词间的间隔.    试输出第1个最长的单词和第1个最短单词.输入    一行句子.输出    两行输出:    第1行,第一个最长的单词.    第2行,第一个最短的单词.样例输入    I am studying Programming language C

作业-- 统计文本文件中的字符数、单词数、行数

用AndroidStudio解析统计文本文件中的字符数.单词数.行数. 代码部分: package administrator.mc; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widge

AC日记——最长最短单词 openjudge 1.7 25

25:最长最短单词 总时间限制:  1000ms 内存限制:  65536kB 描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母.空格和逗号.单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔. 试输出第1个最长的单词和第1个最短单词. 输入 一行句子. 输出 两行输出:第1行,第一个最长的单词.第2行,第一个最短的单词. 样例输入 I am studying Programming language C in Peking University 样例输出 P

最长最短单词c++

本人只是一个菜鸡.这还是要感谢一个大佬的帮助才能够写出来.分享给大家. #include<bits/stdc++.h>using namespace std;int main(){char a[20000];char wlong[200];char wshort[200],word[200];int numlong=0,numshort=100;int i,n,l,k,cl; l=0;k=0;cin.getline(a,20000);n=strlen(a); for(i=0;i<=n;i

【C】字符串的输入,求输入字符串中最长的单词

首先,基本目标很简单,就是利用C语言:编写一个函数,输入一行字符,将此行字符中的最长的单词输出. 代码如下: #include<stdio.h> void input(char s[]){ int i=0; for(int c;(c=getchar())!='\n';i++){ s[i]=c; } s[i]='\0';//读取完成,记得对这个字符数组封口 } char* findmax(char s[]){ int max=0,word_length=0,p=0,i=0;//这个p是用来记录最

C语言之文件操作03——最长最短行查找和统计

//文件 /* =============================================================== 题目:从文本文件中找出最长和最短的行输出在屏幕上,并统计文件中 共有多少行? =============================================================== */ #include<stdio.h> #include<string.h> #define N 80 #define HH prin

统计字符串中的单词数目

统计字符串中单词的数目,更复杂的话从一个文本中读出字符串并生成单词数目统计结果.         第一个问题:这个问题的解决方案是,字符串之所以可以成为单词就是因为有空格符的出现,那么对于字符串中单词的数目来说,只需要统计其中空格符出现的次数就可以了~~~ 第二个问题,从文本中读出字符串并统计每一个单词的统计结果,那么久需要借助于字典map了,每一个单词使用了一个位置 ,如果是已经出现的单词,那么就给相应的单词数量加一,如果没有出现在字符串中,那么就添加该单词. 对于一串字符串来说,如果需要对于

2014华为实习上级笔试题-- 统计字符串中出现的单词

#include<iostream> //#include<string> using namespace std; struct node { char word[10]; int num; }; node obj[100]; void my_word(char input[], char output[]) { int sum=0,flag=0; int i=0,j=0,k=0; while(input[i]!='\0')///////////读入单词 { if((input[

简单的方法来统计文件中单词和各种标点符号个数

此小程序使用最基本的方法来统计文本中英文单词的个数,想法也比较简单: (1)从文本中文本读取内容,使用BufferedReader类每次读取一行并添加到StringBuffer类型变量中, 最后StringBuffer类型变量即为文本的内容,如StringBuffer sb: (2)把sb的内容全部转化成小写字母(或大写字母): (3)统计文件中各种标点符号个数: (4)把所有标点符号统一替换成一种标点符号,如替换成逗号 (5)替换后的文本使用字符串的分割函数来获取返回的字符串数组的长度,此长度