将输入的两个字符串合并后按下标的奇偶放入两个vector中,排序后按要求对每个字符进行处理,最终合成结果输出。
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
char transform(char letter);
int main() {
string s1, s2;
cin >> s1 >> s2;
string s = s1 + s2;
vector<char> letters1;
vector<char> letters2;
for (int i = 0; i < s.length(); i++) {
if (i % 2 == 0) {
letters1.push_back(s.at(i));
} else {
letters2.push_back(s.at(i));
}
}
sort(letters1.begin(), letters1.end());
sort(letters2.begin(), letters2.end());
for (char & letter : letters1) {
letter = transform(letter);
}
for (char & letter : letters2) {
letter = transform(letter);
}
for (int i = 0; i < s.length(); i++) {
if (i % 2 == 0) {
s.at(i) = letters1.at(i / 2);
} else {
s.at(i) = letters2.at(i / 2);
}
}
cout << s;
return 0;
}
char transform(char letter) {
int num;
if (tolower(letter) >= 'a' && tolower(letter) <= 'f') {
num = tolower(letter) - 'a' + 10;
} else if (letter >= '0' && letter <= '9'){
num = letter - '0';
} else {
return letter;
}
int sum = 0;
for (int i = 0; i < 4; i++) {
sum += (num % 2) * pow(2, 3 - i);
num /= 2;
}
if (sum < 10) {
return sum + '0';
} else {
return sum - 10 + 'A';
}
}
// 64 位输出请用 printf("%lld")



京公网安备 11010502036488号