题解 | #字符串合并处理#
字符串合并处理
http://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
🙃🙃🙃🙃🙃🙃 #include <stdio.h> #include <string.h> #include <stdlib.h> struct StrL { char str; int flag; }; int exchange(struct StrL a[],int len) { int i,j; struct StrL temp; for(i=0;i<len;i++) { for(j=0;j<len-1;j++) { if(a[j].str>a[j+1].str) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } return 0; } int fun(int x,int y) { if(y==0) { return 1; } if(--y) { x*=fun(x,y); } return x; } char tran_bit(int ch) { if(ch==0) { return '0'; } int m[4]={0},num=0,i,l=0; char chr; while(ch>1) { m[num++]=ch%2; ch/=2; } m[num]=1; int k=0; for(i=3;i>=0;i--) { l+=m[i]*fun(2,k); k++; } if(l>9&&l<16) { chr='A'+l-10; } if(l>=0&&l<=9) { chr='0'+l; } return chr; } int main() { struct StrL newstr[2000],str3[1000],str4[1000]; char str1[2000],str2[1000],ch1; int i,j,len,ch; while(scanf("%s",str1)!=EOF) { scanf("%s",str2); strcat(str1,str2); int k=0,len1=0,len2=0; len=strlen(str1); for(i=0;i<len;i++) { if(k%2==0) { newstr[k].flag=0; } if(k%2==1) { newstr[k].flag=1; } newstr[k++].str=str1[i]; } for(i=0;i<len;i++) { if(newstr[i].flag==0) { str3[len1++]=newstr[i]; } } exchange(str3,len1); for(i=0;i<len;i++) { if(newstr[i].flag==1) { str4[len2++]=newstr[i]; } } exchange(str4,len2); k=0; for(i=0;i<len;i++) { if(newstr[i].flag==0) { newstr[i].str=str3[k++].str; } } k=0; for(i=0;i<len;i++) { if(newstr[i].flag==1) { newstr[i].str=str4[k++].str; } } for(i=0;i<len;i++) { if(newstr[i].str>='a'&&newstr[i].str<='f') { ch=newstr[i].str-32-'A'+10; ch1=tran_bit(ch); } else if(newstr[i].str>='0'&&newstr[i].str<='9') { ch=newstr[i].str-'0'; ch1=tran_bit(ch); } else if(newstr[i].str>='A'&&newstr[i].str<='F') { ch=newstr[i].str-'A'+10; ch1=tran_bit(ch); } else if(newstr[i].str>='g'&&newstr[i].str<='z') { ch1=newstr[i].str; } else if(newstr[i].str>='G'&&newstr[i].str<='Z') { ch1=newstr[i].str; } printf("%c",ch1); } printf("\n"); } }