// 0939.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string> #include <iostream> #include <vector> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //思路:查找符号位置,统计单词间隔数,则得单词数; //计算单词长度(两个最近符号位置之差)并记录,逐个比较大小,加入vector。 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 strFuhao = ":, 0123456789"; cout << sentence << endl; //word起始位置,标点符号(,' ':)位置,把数字也视为标点符号。 string::size_type word_begin_pos = 0,punctuation_pos = 0; //word间隔计数器,word长度,word最大长度,word最小长度。 int space_counter = 0, wordlength = 0, maxlength = 0, minlength = 0; //分别记录最大长度word和最小长度word的始末位置。 vector<int> maxposvector,minposvector; while ( (punctuation_pos = sentence.find_first_of(strFuhao,punctuation_pos)) != string::npos ) { if( punctuation_pos != word_begin_pos )//如果标点符号位置不是单词起始位置 { //计算单词长度 wordlength = punctuation_pos - word_begin_pos; //首次最大长度和最小长度赋值为第一个单词的长度 if (space_counter == 0) maxlength = minlength = wordlength; //如果大,则清空maxvector,然后添加 if (wordlength > maxlength){ maxlength = wordlength; maxposvector.clear(); maxposvector.push_back(word_begin_pos); maxposvector.push_back(punctuation_pos); }//如果相等,直接添加 else if (wordlength == maxlength){ maxposvector.push_back(word_begin_pos); maxposvector.push_back(punctuation_pos); } //如果小,则清空minvector,然后添加 if (wordlength < minlength){ minlength = wordlength; minposvector.clear(); minposvector.push_back(word_begin_pos); minposvector.push_back(punctuation_pos); }//如果相等,直接添加 else if (wordlength == minlength){ minposvector.push_back(word_begin_pos); minposvector.push_back(punctuation_pos); } //计数器加1 ++space_counter; } //下一次查找起始位置,即标点符号位置加1 ++punctuation_pos; //下一个单词起始位置,同为标点符号位置加1 word_begin_pos = punctuation_pos; } //单词个数为间隔数加1 cout << "the number of words is: " << space_counter + 1 << endl; cout << "the max_length words are: "; for (vector<int>::iterator iter = maxposvector.begin();iter != maxposvector.end();iter = iter + 2){ for (int index = *iter; index != *( iter + 1 ); index++) cout << sentence[index]; cout << " "; } cout << endl << "the min_length words are: "; for (vector<int>::iterator iter = minposvector.begin();iter != minposvector.end();iter = iter + 2){ for (int index = *iter; index != *( iter + 1 ); index++) cout << sentence[index]; cout << " "; } return 0; }