本题考查字符串的操作,思路挺明确的,难点在于中间穿插了很多字符串分割、排序、进制转换等方面的问题。
#include #include #include #include #include using namespace std; static bool cmp(const string &a, const string &b) { return a < b; } int main() { string s; getline(cin, s, '\n'); vector str_vec; istringstream is(s); string seg; while (getline(is, seg, ' ')) str_vec.push_back(seg); string str = str_vec[0] + str_vec[1]; // 第一步 // 第二步 vector seg1, seg2; for (int i = 0; i < str.size(); i++) { if (i % 2 == 0) seg1.push_back(string(1, str[i])); else seg2.push_back(string(1, str[i])); } sort(seg1.begin(), seg1.end(), cmp); sort(seg2.begin(), seg2.end(), cmp); string str2; int index1 = 0, index2 = 0; for (int i = 0; i < str.size(); i++) { if (i % 2 == 0) { str2 = str2 + seg1[index1]; index1++; } else { str2 = str2 + seg2[index2]; index2++; } } // 第三步 for (int i = 0; i < str2.size(); i++) { if ((str2[i] >= '0' && str2[i] = 'a' && str2[i] = 'A' && str2[i] <= 'F')) { // 十六进制转换为十进制 int val; // '0'-> 48 if (str2[i] >= '0' && str2[i] <= '9') val = str2[i] - 48; // 'A'->65 if (str2[i] >= 'A' && str2[i] <= 'F') val = str2[i] - 65 + 10; // 'a'->97 if (str2[i] >= 'a' && str2[i] <= 'f') val = str2[i] - 97 + 10; // 十进制转换为二进制 string temp; while (val / 2) { temp = temp + to_string(val % 2); val = val / 2; } temp = temp + to_string(val % 2); // 补齐四位的二进制 if (temp == "1") temp = "1000"; else if (temp == "11") temp = "1100"; else if (temp == "01") temp = "0100"; else if (temp == "10") temp = "1000"; else if (temp == "100") temp = "1000"; else if (temp == "101") temp = "1010"; else if (temp == "110") temp = "1100"; else if (temp == "111") temp = "1110"; else if (temp == "011") temp = "0110"; else if (temp == "010") temp = "0101"; else if (temp == "001") temp = "0010"; else if (temp == "000") temp = "0000"; // 再将二进制转换回十进制 val = stoi(temp); int dec = 0, p = 1; while (val) { dec += (val % 10) * p; p *= 2; val /= 10; } // 再将十进制转换回十六进制 if (dec >= 0 && dec <= 9) { switch (dec) { case 0: str2[i] = '0'; break; case 1: str2[i] = '1'; break; case 2: str2[i] = '2'; break; case 3: str2[i] = '3'; break; case 4: str2[i] = '4'; break; case 5: str2[i] = '5'; break; case 6: str2[i] = '6'; break; case 7: str2[i] = '7'; break; case 8: str2[i] = '8'; break; case 9: str2[i] = '9'; break; } } else if (dec >= 10 && dec <= 15) { switch (dec) { case 10: str2[i] = 'A'; break; case 11: str2[i] = 'B'; break; case 12: str2[i] = 'C'; break; case 13: str2[i] = 'D'; break; case 14: str2[i] = 'E'; break; case 15: str2[i] = 'F'; break; } } } else { continue; } } cout << str2 << endl; return 0; }