本题考查字符串的操作,思路挺明确的,难点在于中间穿插了很多字符串分割、排序、进制转换等方面的问题。
#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;
}
京公网安备 11010502036488号