HJ30. 字符串合并处理
描述
按照指定规则对输入的字符串进行处理。
详细描述:
根据这个转换规则,由第二步生成的字符串 “abcedf” 转换后会生成字符串 "5D37BF"。
输入描述
样例输入两个字符串,用空格隔开。
输出描述
输出转化后的结果。
示例1
输入:
dec fab
输出:
5D37BF
示例2
输入:
ab CD
输出:
3B5D
说明:
合并后为abCD,按奇数位和偶数位排序后是CDab(请注意要按ascii码进行排序,所以C在a前面,D在b前面),转换后为3B5D示例3
输入:
123 15
输出:
88C4A
C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2021-08-14
#include <stdio.h> #include <string.h> #include <math.h> #define MAX 100 int char_cmp(const void* _a,const void*_b) { char* a=(char*)_a; char* b=(char*)_b; return *a-*b; } char turn_bit(int x) { int i=0; int tmp=0; char ret=0; for(i=0;i<4;i++) { tmp=tmp+((x>>i)&1)*pow(2,3-i); } if(tmp>=0&&tmp<=9) { tmp=tmp+'0'; ret=(char)tmp; return ret; } else if(tmp>=10&&tmp<=15) { tmp=tmp-10+'A'; ret=(char)tmp; return ret; } ret=(char)x; return ret; } int main() { char str1[2*MAX]={0}; char str2[MAX]={0}; char tmp_str1[MAX]={0}; char tmp_str2[MAX]={0}; int tmp=0;int i=0; while(scanf("%s",str1)!=EOF) { scanf("%s",str2); //合并字符串 strcat(str1,str2); //字符串分奇偶 int len=strlen(str1); tmp_str1[0]=str1[0]; int j=0;int k=0; for(i=1;i<len;i++) { if(i%2==0) { tmp_str1[++j]=str1[i]; } else { tmp_str2[k++]=str1[i]; } } //奇偶字符串排序 qsort(tmp_str1,j+1,sizeof(char),char_cmp); qsort(tmp_str2,k,sizeof(char),char_cmp); //还原回去 str1[0]=tmp_str1[0]; j=0;k=0; for(i=1;i<len;i++) { if(i%2==0) { str1[i]=tmp_str1[++j]; } else { str1[i]=tmp_str2[k++]; } } //字符操作 for(i=0;i<len;i++) { if(str1[i]>='0'&&str1[i]<='9') { tmp=str1[i]-'0'; str1[i]=turn_bit(tmp); } else if((str1[i]>='A'&&str1[i]<='F')||(str1[i]>='a'&&str1[i]<='f')) { tmp=toupper(str1[i])-'A'+10; str1[i]=turn_bit(tmp); } } printf("%s\n",str1); } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 360KB, 提交时间: 2021-09-11
# include <stdio.h> # include <stdlib.h> # include <string.h> # include <ctype.h> int main() { char str1[100], str2[100]; char dict[17] = "084C2A6E195D3B7F";//0123456789abcdef(字母大小写全包括)对应的输出,17是因为包含结尾\0 int i, j, len; char t; while (scanf("%s %s", str1, str2) != EOF) { strcat(str1, str2);//str2拼到str1后面 len = strlen(str1); for (i = 0; i < len - 2; i += 2) { for (j = 0; j < len - 2 - i; j += 2) { if (str1[j] > str1[j + 2]) { t = str1[j + 2]; str1[j + 2] = str1[j]; str1[j] = t; } } } for (i = 1; i < len - 1; i += 2) { for (j = 1; j < len - 1 - i; j += 2) { if (str1[j] > str1[j + 2]) { t = str1[j + 2]; str1[j + 2] = str1[j]; str1[j] = t; } } } for(i = 0;i < len;i++) { if(str1[i] <= '9' && str1[i] >= '0') str1[i] = dict[str1[i] - '0']; else if(str1[i] <= 'F' && str1[i] >= 'A') str1[i] = dict[str1[i] - 'A' + 10]; else if(str1[i] <= 'f' && str1[i] >= 'a') str1[i] = dict[str1[i] - 'a' + 10]; } printf("%s\n",str1); } return 0; }