题解 | #字符串合并处理#
字符串合并处理
http://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include<string>
using namespace std;
//实现对1010到0101的4位反转
int func(int n)
{
int n1;
for(int i=0;i<4;i++)
{
n1<<=1;
n1|=n&1;
n>>=1;
}
return n1;
}
int main()
{
string s,s1,s2;
int len,tem;
while(cin>>s1>>s2)
{
s.clear();//多次输入,记得s做清空
s+=s1;
s+=s2;
len=s.length();
//长字符串s偶数位冒泡排序
for(int i=0;i<len;i+=2)
{
for(int j=0;j<len-2-i;j+=2)
{
if(s[j]>s[j+2])
{
swap(s[j],s[j+2]);
}
}
}
//长字符串s奇数位冒泡排序
for(int i=1;i<len;i+=2)
{
for(int j=1;j<len-1-i;j+=2)
{
if(s[j]>s[j+2])
{
swap(s[j],s[j+2]);
}
}
}
//对s[i]的判断,分为0-9,a-f,A-F,还有其他
//不同的是s[i]对应着不同的输出方式
for(int i=0;i<len;i++)
{
if(s[i]>='0'&s[i]<='9')
{
tem=func(s[i]-'0');
if(tem<=9)
{
cout<<(char)(tem+'0');
}
else
{
cout<<(char)(tem-10+'A');
}
}
else if(s[i]>='a'&s[i]<='f')
{
tem=func(s[i]-'a'+10);
if(tem<=9)
{
cout<<(char)(tem+'0');
}
else
{
cout<<(char)(tem-10+'A');
}
}
else if(s[i]>='A'&s[i]<='F')
{
tem=func(s[i]-'A'+10);
if(tem<=9)
{
cout<<(char)(tem+'0');
}
else
{
cout<<(char)(tem-10+'A');
}
}
else
{
cout<<s[i];
}
}
cout<<endl;
}
return 0;
}