题目:已知有如下 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 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。
程序
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 gap(" "); //以空格字符为断点查找单词
string::size_type pos = 0; //查找的初始位置为0
string::size_type beg = 0;
string::size_type length = 0;
vector<string> s;
while ((pos = sentence.find_first_of(gap, pos)) != string::npos)//在sentence的pos位置查找gap,找到了进行下一步
{
for (string::size_type i =beg; i != pos; i++)
{
if (isalpha(sentence[i])) //如果是字母,长度加一
{
length++;
}
}
if (length == 0)//如果全是数字,则从当前找到的下一个位置开始查找
{
beg = ++pos;//下一个位置
continue;
}
else
{
s.push_back(sentence.substr(beg, length));//找到了单词,则push_back
beg = ++pos;//下一个位置
length = 0;//归零
}
}
int max = 0; //初始长度为0
int min = sizeof(s.begin()); //初始长度为第一个单词的长度
for (vector<string>::iterator idex = s.begin(); idex != s.end(); idex++)
{
max = (max <= (*idex).size() ? (*idex).size() : max); //找最大
min = (min >= (*idex).size() ? (*idex).size():min); //找最小
}
for (vector<string>::iterator idex = s.begin(); idex != s.end(); idex++)
{
if ((*idex).size() == max)
cout << "The longest word: " << *idex << " ";
}
cout << endl;
for (vector<string>::iterator idex = s.begin(); idex != s.end(); idex++)
{
if ((*idex).size() == min)
cout << "The shortest word: " << *idex << " " << endl;;
}
cout << endl;
cout << "sentence have " << s.size() << " words" << endl;
return 0;
}
运行结果:
The longest word: perspicacious
The shortest word: We
The shortest word: of
The shortest word: us
sentence have 15 words