首页 > 代码库 > 统计语句中的最长最短单词
统计语句中的最长最短单词
已知 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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。