华为社招题目

题目描述:

给定长度小于100的一个字符串,区分大小写的情况下统计其中字母的个数,并按照由大到小的顺序输出.当字母个数一样时,按照把先出现的字母放在前面.当字符串中没有字母时,则不要输出.

举例:

输入:

abbbdcdc123

输出:

b=3

d=2

c=2

a=1

  1 #include <iostream>
  2 #include <string>
  3 #include <set>
  4 #include <vector>
  5 #include <algorithm>
  6 using namespace std;
  7 
  8 //答题思路:
  9 /*
 10 首先统计出总共有多少个不同的字母;
 11 对不同的字母,用二维vector记录其个数(初始化为0)以及首次出现的位置(初始化为-1);
 12 遍历整个字符串,对个数和首次位置进行更新;
 13 对vector基于个数和首次位置进行排序(冒泡法)
 14 */
 15 
 16 int main()
 17 {
 18     string str;
 19     while (cin >> str)
 20     {
 21         set<char> setInt;
 22         //这里用set来剔除重复的,还有更好的方法吗?
 23         for (int i = 0; i < str.size(); i++)
 24         {
 25             if (str[i] >= 'A' && str[i] <= 'z')
 26             {
 27                 setInt.insert(str[i]);
 28             }
 29         }
 30 
 31         cout << endl;
 32         for (set<char>::iterator it = setInt.begin(); it != setInt.end(); it++)
 33         {
 34             cout << " " << *it;
 35         }
 36         cout << endl; 
 37 
 38         //把set转成vector来操作,set的玩的不熟.
 39         vector<char> vec0;
 40         for (set<char>::iterator it = setInt.begin(); it != setInt.end(); it++)
 41         {
 42             vec0.push_back(*it);
 43         }
 44 
 45         vector<vector<int>> vec2;
 46         vector<int> vec1;
 47         int nOutSize = vec0.size();
 48         int nInnerSize = 3;
 49 
 50         for (int j = 0; j < nInnerSize; j++)
 51         {
 52             vec1.push_back(-1);
 53         }
 54         for (int k = 0; k < nOutSize; k++)
 55         {
 56             vec2.push_back(vec1);    
 57             vec2[k][0] = vec0[k]; //第一列存字符,第二列存个数,第三列存首次位置.
 58             vec2[k][1] = 0;
 59         }
 60 
 61         for (int k = 0; k < nOutSize; k++)
 62         {
 63             for (int j = 0; j < nInnerSize; j++)
 64             {
 65                 cout << " " << vec2[k][j];
 66             }
 67             cout << endl;
 68         }
 69         cout << endl;
 70 
 71         for (int i = 0; i < str.size(); i++)
 72         {
 73             for (int j = 0; j < vec0.size(); j++)
 74             {
 75                 if (str[i] == vec2[j][0])
 76                 {
 77                     if (vec2[j][2] == -1)
 78                     {
 79                         vec2[j][2] = i;
 80                     }
 81                     vec2[j][1]++;
 82                 }
 83             }
 84         }
 85 
 86         for (int k = 0; k < nOutSize; k++)
 87         {
 88             for (int j = 0; j < nInnerSize; j++)
 89             {
 90                 cout << " " << vec2[k][j];
 91             }
 92             cout << endl;
 93         }
 94         cout << endl;
 95 
 96         for (int i = 0; i < nOutSize-1; i++)
 97         {
 98             for (int j = i + 1; j < nOutSize; j++)
 99             {
100                 if (vec2[i][1] < vec2[j][1])
101                 {
102                     vec2[i].swap(vec2[j]); //两个vector之间交换
103                 }
104                 else if (vec2[i][1] == vec2[j][1])
105                 {
106                     if (vec2[i][2] > vec2[j][2])
107                     {
108                         vec2[i].swap(vec2[j]);
109                     }
110                 }
111             }
112         }
113 
114         for (int k = 0; k < nOutSize; k++)
115         {
116             for (int j = 0; j < nInnerSize; j++)
117             {
118                 cout << " " << vec2[k][j];
119             }
120             cout << endl;
121         }
122         cout << endl;
123 
124         for (int k = 0; k < nOutSize; k++)
125         {
126             //转成字符类型
127             cout << (char)vec2[k][0] << "=" << vec2[k][1] << endl;
128         }
129     }
130 }

 

输入:

abbbdcdc123

 输出:

a b c d

97 0 -1
98 0 -1
99 0 -1
100 0 -1

97 1 0
98 3 1
99 2 5
100 2 4

98 3 1
100 2 4
99 2 5
97 1 0

b=3
d=2
c=2
a=1

posted @ 2019-08-25 21:31  心媛意码  阅读(2155)  评论(0编辑  收藏  举报