题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include <stdio.h> #include <string.h> int printStr(int n[]) { int num = 0; for (int i = 3; i >= 0; i--) { num = 2 * num + n[i]; } if (num >= 0 && num <= 9) { printf("%d", num); } else if (num >= 10 && num <= 15) { printf("%c", num + 55); } else { printf("错误数据"); } return 0; } int exChange16(char str) { int num=0; int n[4]; if (str >= '0' && str <= '9') { num = (int)str - 48; } else if (str >= 'a' && str <= 'z') { num = (int)str - 97 + 10; } else if (str >= 'A' && str <= 'Z') { num = (int)str - 65 + 10; } int j = 3; for (int i = 0; i < 4; i++) { n[j] = num % 2; num = num / 2; j--; } printStr(n); return 0; } int main() { char str1[101] = { 0 }; char str2[101] = { 0 }; //注意 这里用gets(str1);gets(str2);会发生错误 不知道为什么 但是visual上不会 scanf("%s",str1); scanf("%s",str2); int len1 = strlen(str1); int len2 = strlen(str2); // 第一步 char allstr[201] = { 0 }; for (int i = 0; i < len1; i++) { allstr[i] = str1[i]; } for (int i = 0; i < len2; i++) { allstr[i + len1] = str2[i]; } int len = strlen(allstr); //第二步 排序 for (int i = 0; i < len; i = i + 2) { for (int j = i; j < len; j = j + 2) if (allstr[i] > allstr[j]) { char temp = allstr[i]; allstr[i] = allstr[j]; allstr[j] = temp; } } for (int i = 1; i < len; i = i + 2) { for (int j = i; j < len; j = j + 2) if (allstr[i] > allstr[j]) { char temp = allstr[i]; allstr[i] = allstr[j]; allstr[j] = temp; } } //第三步 for (int i = 0; i < len; i++) { if ((allstr[i] <= '9' && allstr[i] >= '0') || (allstr[i] >= 'a' && allstr[i] <= 'f') || (allstr[i] >= 'A' && allstr[i] <= 'F')) { //printf("&&&&&&"); exChange16(allstr[i]); } else { printf("%c", allstr[i]); } } return 0; }