C/C++对等长单词进行字典序排序
只对等长字母排序:
思路:
代码:
/*
>Plan:对等长单词进行字典序排序;
>Author:ADiiana
>Time:2019/3/15
*/
#include<iostream>
#include<vector>
#include<string>
using namespace std;
const int NLETTER = 26; //总共有26个字母
//将从strs中输出的单词存入letter里
vector<string> new_letter(vector<vector<string>> &strs);
vector<string> new_letter(vector<vector<string>> &strs){
vector<string> letter;
for (size_t i = 0; i < strs.size(); i++){
for (size_t j = 0; j < strs[i].size(); j++){
letter.push_back(strs[i][j]);
}
}
return letter;
}
int main(){
vector<string> letter = { "cac", "abb", "aab", "bbd", "aaa", "def", "ccc"};
vector<vector<string>> strs; //存放每个个字母对应的若干个单词的集合
strs.resize(NLETTER);
for (size_t j = 0; j < letter[0].size(); j++){
//每个单词有多少位就要排序多少次
for (size_t i = 0; i < letter.size(); i++){
//将单词存放进对应字母为下标的vector中
char ch = *(letter[i].c_str() + letter[i].size() - j - 1) - 'a';
strs[ch].push_back(letter[i]);
}
//输出序列更新,并将strs置空,继续下一轮循环
letter = new_letter(strs);
strs.clear();
strs.resize(NLETTER);
}
for (size_t i = 0; i < letter.size(); i++){
cout << letter[i] << endl;
}
system("pause");
return 0;
}