题解 | #字符串合并处理#
字符串合并处理
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;
}

查看21道真题和解析