提示:文章
文章目录
前言
前期疑问:
本文目标:
一、背景
最近
二、字符串合并处理
2.1 第一版
#include <ctype.h>
#include <stdio.h>
#include <string.h>
void sortStr(char* str, int len)
{
for(int i = 0; i < len; i = i + 2)
{
for(int j = i + 2; j < len; j = j + 2)
{
if(str[i] > str[j])
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
for(int i = 1; i < len; i = i + 2)
{
for(int j = i + 2; j < len; j = j + 2)
{
if(str[i] > str[j])
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
}
void transData(int* data)
{
int temp = *data;
int index = 0;
int dstData = 0;
while(temp)
{
int dat = temp % 2;
temp /= 2;
dstData += dat * pow(2, 3 - index);
index++;
}
*data = dstData;
}
void transStr(char* str, int len)
{
for(int i = 0; i < len; i++)
{
int data = 0;
if(isalpha(str[i]))
{
data = tolower(str[i]) - 'a' + 10;
}
else if(isdigit(str[i])) {
data = tolower(str[i]) - '0';
}
transData(&data);
if(data <= 9)
{
str[i] = '0' + data;
}
else {
str[i] = toupper('a' + data - 10);
}
}
}
int main() {
char str1[100] = {'\0'};
char str2[100] = {'\0'};
while (scanf("%s %s", str1, str2) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
//printf("%s %s\n", str1, str2);
int dat = 14;
//transData(&dat);
//printf("%d", dat);
int len1 = strlen(str1);
int len2 = strlen(str2);
strcat(str1, str2);
int len = strlen(str1);
sortStr(str1, len);
//printf("%s\n", str1);
transStr(str1, len);
printf("%s\n", str1);
}
return 0;
}
用例输入Eqr v9oEb12U2ur4xu7rd931G1f50qDo
预期输出8084842CAE9B9G7D7BUFooqqrrrvuxu
实际输出8084842CAE9B907D7B7F1155DDDF787
2.2 第二版
这版ac了。问题是字符大于f的就不处理了。根据示例调试下就可以。
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
void sortStr(char* str, int len)
{
for(int i = 0; i < len; i = i + 2)
{
for(int j = i + 2; j < len; j = j + 2)
{
if(str[i] > str[j])
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
for(int i = 1; i < len; i = i + 2)
{
for(int j = i + 2; j < len; j = j + 2)
{
if(str[i] > str[j])
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
}
void transData(int* data)
{
int temp = *data;
int index = 0;
int dstData = 0;
while(temp)
{
int dat = temp % 2;
temp /= 2;
dstData += dat * pow(2, 3 - index);
index++;
}
*data = dstData;
}
bool isTargetAlpha(char* c)
{
char temp = tolower(c);
if(temp > 'f' && temp <= 'z')
{
return false;
}
return true;
}
void transStr(char* str, int len)
{
for(int i = 0; i < len; i++)
{
if(!isTargetAlpha(str[i]))
{
continue;
}
int data = 0;
if(isalpha(str[i]))
{
data = tolower(str[i]) - 'a' + 10;
}
else if(isdigit(str[i])) {
data = tolower(str[i]) - '0';
}
transData(&data);
if(data <= 9)
{
str[i] = '0' + data;
}
else {
str[i] = toupper('a' + data - 10);
}
}
}
int main() {
char str1[100] = {'\0'};
char str2[100] = {'\0'};
while (scanf("%s %s", str1, str2) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
int dat = 14;
int len1 = strlen(str1);
int len2 = strlen(str2);
strcat(str1, str2);
int len = strlen(str1);
sortStr(str1, len);
transStr(str1, len);
printf("%s\n", str1);
}
return 0;
}
三、
3.1
总结
未完待续