#include<iostream>
#include<string>
#include<vector>
using namespace std;
#define Maxlen 1
#define Minlen 100
int main()
{
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 letters("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
int letter_num = 0;
vector<string> sWords;
vector<string> lWords;
int maxlen = Maxlen;
int minlen = Minlen;
string::size_type pos1 = 0; //记录不是字母的元素
string::size_type pos2 = sentence.find_first_of(letters); //记录是字母的元素
while((pos1 = sentence.find_first_not_of(letters, pos1)) != string ::npos)
{
if(pos1 > pos2)
{
if(pos1 - pos2 >= maxlen )
{
string temp(sentence, pos2, pos1-pos2);
if(pos1-pos2 != maxlen)//只有和上一次一样长的单词才存入,否则更新容器重启计数
{
lWords.clear();
}
lWords.push_back(temp);
maxlen = pos1 - pos2;
}
if(pos1 - pos2 <= minlen)
{
string temp(sentence, pos2, pos1-pos2);
if(pos1-pos2 != minlen)
{
sWords.clear();
}
sWords.push_back(temp);
minlen = pos1 - pos2;
}
}
pos1++;
pos2 = sentence.find_first_of(letters, pos1); //注意更新pos2的位置时是从pos1开始算起的
}
vector<string> ::iterator iter ;
cout<<"the long words are:"<<endl;
for(iter = lWords.begin(); iter != lWords.end(); iter++)
{
cout<<*iter<<" ";
}
cout<<endl;
cout<<"the short words are:"<<endl;
for(iter = sWords.begin(); iter != sWords.end(); iter++)
{
cout<<*iter<<" ";
}
cout<<endl;
system("pause");
return 0;
}
习题9.39输出最长和最短单词
最新推荐文章于 2025-05-12 19:38:58 发布