输入BadbAbB,输出AaBBbbd。因为A的ascii码比a小,所以相等的时候,直接输出a<b。不相等的时候,如果一个是大写,一个是小写,就要转换之后再比较。
#include <iostream> #include <vector> #include <string> #include <sstream> #include <algorithm> #include <unordered_map> using namespace std; bool is_lower(char c) { return c >= 'a' && c <= 'z'; } static bool cmp(char& a, char& b) { //保持a是小的,b是大的 //考虑两种相同值 if (a == b) { return a < b; } else if (abs(a - b) == 32) { //A的ascii码比较小,所以要放左边 return a < b; } //考虑不同值的时候 else { if (is_lower(a) && is_lower(b)) return a < b; else if (is_lower(a)) { //b是大写 char temp = b + 32; return a < temp; //返回a和b转换后的temp比较小的那个 } else if (is_lower(b)) { //a是大写 char temp = a + 32; return temp < b; //返回b和a转换后的temp比较小的那个 } else { return a < b; //两个都是大写的,返回比较小的那个 } } } int main() { string input = "BadbAbB"; sort(input.begin(), input.end(), &cmp); cout << input << endl; //cout << 'A' - 'a' << endl;//-32,那么就是A的ascii数值比较小 return 0; }
今天面试的时候中间写了一个小bug。。。。
标签:输出,排序,大小写,规则,字符串,include From: https://www.cnblogs.com/Candy003/p/16596373.html