首页 > 编程语言 > 详细

c++-字符串中的单词统计与单词大小排序

时间:2020-06-07 21:47:07      阅读:56      评论:0      收藏:0      [点我收藏+]
  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 }

 

c++-字符串中的单词统计与单词大小排序

原文:https://www.cnblogs.com/Let-us-Coding/p/13061875.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!