僵尸鸡尾酒的故事:C++编程找出字符串中最长和最短的单词

来源:百度文库 编辑:中科新闻网 时间:2024/05/04 07:24:47
如: 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对象中最长和最短的单词,如果有多个最长或最短的单词,则将它们全部输出
C++初学,请大虾们指点

#pragma warning(disable : 4786)

#include <iostream>
#include <string>
#include <vector>

using namespace std;

void main()
{
const string line1 = "We were her pride of 10 she named us:";
const string line2 = "Benjamin, Phoenix, the Prodigal";
const string line3 = "and perspicacious pacific Suzanne";
const string sentence = line1 + ' ' + line2 + ' ' + line3;

const char *stmp = sentence.data();
vector< string > vect, vecMin, vecMax;
string strtmp = "";
unsigned int i;

//搜索字符串中的所有单词
for(i = 0; i <= strlen(stmp); i++)
{
if(isalpha(stmp[i]))
{
strtmp += stmp[i];
}
else if(!strtmp.empty())
{
vect.push_back(strtmp);
strtmp = "";
}
}

if(!vect.size())
{
cout<<"找不到单词!"<<endl;
return;
}

vecMin.push_back(vect[0]);
vecMax.push_back(vect[0]);

for(i = 1; i < vect.size(); i++)
{
if(vecMin[0].length() > vect[i].length())
{
vecMin.clear();
vecMin.push_back(vect[i]);
}
else if(vecMin[0].length() == vect[i].length())
{
vecMin.push_back(vect[i]);
}

if(vecMax[0].length() < vect[i].length())
{
vecMax.clear();
vecMax.push_back(vect[i]);
}
else if(vecMax[0].length() == vect[i].length())
{
vecMax.push_back(vect[i]);
}
}

cout<<"原字符串:"<<endl<<stmp<<endl<<endl;
cout<<"共找到单词"
<<vect.size()<<"个,分别是:"<<endl;
for(i = 0; i < vect.size(); i++)
cout<<vect[i]<<endl;

cout<<endl<<endl<<"找到的最短的单词共有"
<<vecMin.size()<<"个,分别是:"<<endl;
for(i = 0; i < vecMin.size(); i++)
cout<<vecMin[i]<<endl;

cout<<endl<<endl<<"找到的最长的单词共有"
<<vecMax.size()<<"个,分别是:"<<endl;
for(i = 0; i < vecMax.size(); i++)
cout<<vecMax[i]<<endl;
}