1 #include <iostream> 2 #include <climits> 3 #include <string> 4 #include <cstring> 5 #include <vector> 6 #include <cmath> 7 using namespace std; 8 int main() 9 { 10 string line1 = "We were her pride of 10 she named us:"; 11 string line2 = "Benjamin, Phoenix, the Prodigal"; 12 string line3 = "and perspicacious pacific Suzanne"; 13 string sentence = line1 + " " + line2 + " " + line3; 14 char *p = &sentence[0];//获取整个字符串 15 int words= 0, size = 0;//words计数,size统计单词字符数 16 vector<char> sign;//空字符容器用以将其单个单词内容作为字符串传送进string容器 17 vector<string> s1;//接收所有单词的容器 18 vector<int> sizes;//存储单词大小的容器,可用来排序 19 20 while(1){ 21 if( *p !=‘ ‘ && *p !=‘:‘ && *p !=‘,‘ && *p){//针对对应字符串设置条件 22 23 size++;//单词字符数+1 24 25 if(isalpha(*p)){//如果是字母 26 27 sign.push_back(*p);//添加进sign这个存储单个单词的字符容器 28 29 *p++;//指向下一个字符 30 31 } 32 else//不是字母 33 34 while(!isalpha(*p))//循环直至遇到字母 35 36 *p++;//指向下一个字符 37 } 38 else{//遇到标志单词结束的字符(非字母) 39 40 if(size){//如果字母统计数不为0 41 42 sizes.push_back(size);//将单词大小加入到sizes这个表示单词大小的容器 43 44 char pr[size];//创建一个正好表示单词大小的数组以存储单词的字符 45 46 int x = 0; 47 48 for(vector<char> ::iterator beg = sign.begin();beg != sign.end(); beg++,x++){ 49 50 pr[x] = *beg;//将字符依序存入数组中 51 } 52 53 pr[x] = ‘\0‘;//结尾设置空字符表明这是一个字符串 54 55 s1.push_back(pr);//将该字符串加入单词容器 56 57 words++;//单词数+1 58 59 sign.clear();//清空存储单词字符的容器 60 61 size = 0;//将单词大小重置为0 62 } 63 if(*p==‘\0‘)//读到字符串结尾时退出 64 65 break;//跳出当前while循环 66 67 *p++;//指向下一个字符 68 } 69 } 70 for(int x = 0; x < sizes.size(); x++) 71 72 for(int y = 0 ; y < sizes.size(); y++){//冒泡排序 73 74 if(sizes[x] < sizes[y]){ 75 76 string s = s1[x]; 77 s1[x] = s1[y]; 78 s1[y] = s; 79 80 int temp = sizes[x];//更新单词大小排序以刷新if判断条件 81 sizes[x] = sizes[y]; 82 sizes[y] = temp; 83 } 84 } 85 int q = 0; 86 vector<string>::size_type min = s1[0].length(), max = s1[s1.size()-1].length(); 87 //获取最小与最大长度 88 vector<string>::iterator beg = s1.begin(), end1 = s1.end();//设置迭代器 89 while(beg != end1){//遍历 90 if((*beg).length() == min){//如果当前长度等于最小长度 91 92 cout<<"最小长度单词:"<<*beg<<endl; 93 94 } 95 else if((*beg).length() == max){//如果当前长度等于最大长度 96 97 cout<<"最大长度单词"<<*beg<<endl; 98 99 } 100 101 *beg++; 102 } 103 }
原文:https://www.cnblogs.com/Let-us-Coding/p/13061875.html