题目描述
题目解析
#include<bits/stdc++.h>
using namespace std;
struct Info{
std::string str;
int id;
Info(std::string str, int id) : str(str), id(id){
}
};
std::vector<Info> split(std::string str, char ch){
std::vector<Info> ans;
int id = 0;
int i = 0;
str += ch;
for (int j = 0; j < str.size(); ++j) {
if(str[j] == ch){
ans.emplace_back(str.substr(i, j - i), id++);
i = j + 1;
}
}
return ans;
}
int main(int argc, char **argv)
{
auto vec = split("i LOVE Cc I love CC Hello Hel Hellow", ' ');
std::sort(vec.begin(), vec.end(), [](Info v1, Info v2){
std::string a1, b1;
std::transform(v1.str.begin(), v1.str.end(), back_inserter(a1), ::toupper);
std::transform(v2.str.begin(), v2.str.end(), back_inserter(b1), ::toupper);
// 当a1 == b1时,保存原来顺序
if(a1 == b1){
return v1.id < v2.id;
}
// 单词中字母比较不区分大小写
return a1 < b1;
});
std::string ans;
// 解决重复问题
int i = 0;
while (i < vec.size()){
ans += vec[i].str + " ";
// 跳过所有相同的a
int j = i + 1;
std::string a1, b1;
std::transform(vec[i].str.begin(), vec[i].str.end(), back_inserter(a1), ::toupper);
while (j < vec.size()){
std::transform(vec[j].str.begin(), vec[j].str.end(), back_inserter(b1), ::toupper);
if(a1 == b1){
j++;
}else{
break;
}
}
i = j;
}
std::cout << ans <<"\n";
}