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 }