#include <iostream>
#include <cctype>
#include <string>
#include <vector>
using namespace std;
int main()
{
/*
* 已知有如下string对象:
* string line1 = "We were her pride of 10 she named us:";
* string line2 = "Benjamin, Phoenix, the Prodigal";
* string line3 = "and perspicacious pacific Suzanne";
* string sentence = line1 + ' ' + line2 + ' ' + line3;
* 编写程序计算sentence中有多少个单词,并指出其中最长和最短的单词。
* 如果有多个最长或最短的单词,则将它们全部输出。
*/
string line1 = "We were her pride of 10 she named us:";
string line2 = "Benjamin, Phoenix, the Prodigal";
string line3 = "and perspicacious pacific Suzanne";
string sentence = line1 + ' ' + line2 + ' ' + line3;
string separators(" \t:,\v\r\n\f");
string word;
string::size_type maxLen, minLen, wordLen, count = 0;
vector<string> longestWords, shortestWords;
//单词的起始位置和结束位置
string::size_type startPos = 0, endPos = 0;
//每次循环处理sentence中的一个单词
while ((startPos = sentence.find_first_not_of(separators, endPos))!=string::npos)
{
//找到下一个单词的起始位置
++count;
//找打下一个单词的结束位置
endPos = sentence.find_first_of(separators, startPos);
if (endPos == string::npos)
{
//找不到下一个出现分隔符的位置,即该单词是最后一个单词
wordLen = sentence.size() - startPos;
}
//找到了下一个出现分隔符的位置
else
{
wordLen = endPos - startPos;
}
//获取单词
word.assign(sentence.begin() + startPos, sentence.begin() + startPos + wordLen);
//设置下次查找的起始位置
startPos = sentence.find_first_not_of(separators, endPos);
//找到的是第一个单词
if (count == 1)
{
maxLen = minLen = wordLen;
longestWords.push_back(word);
shortestWords.push_back(word);
}
else
{
//当前单词比目前的最长单词更长
if (wordLen > maxLen)
{
maxLen = wordLen;
longestWords.clear();
longestWords.push_back(word);
}
else if (wordLen == maxLen)
{
longestWords.push_back(word);
}
if (wordLen < minLen)
{
minLen = wordLen;
shortestWords.clear();
shortestWords.push_back(word);
}
else if (wordLen == minLen)
{
shortestWords.push_back(word);
}
}
}
cout << "word amount: " << count << endl;
vector<string>::iterator iter;
cout << "longest word(s):" << endl;
for (iter = longestWords.begin(); iter != longestWords.end(); iter++)
{
cout << *iter << endl;
}
cout << "shortest word(s):" << endl;
for (iter = shortestWords.begin(); iter != shortestWords.end(); iter ++)
{
cout << *iter << endl;
}
system("pause");
return 0;
}
计算共有多少个单词,并输出最长和最短的单词
最新推荐文章于 2022-04-05 23:28:18 发布