字符串合并处理
题目描述
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”
接口设计及说明:
/*
功能:字符串处理
输入:两个字符串,需要异常处理
输出:合并处理后的字符串,具体要求参考文档
返回:无
*/
void ProcessString(char* str1,char *str2,char * strOutput)
{
}
输入描述:
输入两个字符串
输出描述:
输出转化后的结果
输入例子:
dec fab
输出例子:
5D37BF
解答代码:
#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
#include<string>
#include <cmath>
#define N 102
using namespace std;
void merge(string &s1,string &s2)
{
int i;
for(i=0; i<s2.length(); i++)
s1=s1+s2[i];
}
void sort(string &s)
{
//选择排序思想
int i,j,index;
char ch;
//按照奇数序列排列
for(i=0; i<s.length(); i+=2)
{
index=i;
for(j=i+2; j<s.length(); j+=2)
{
if(s[j]<s[index])
index=j;
}
ch=s[i];
s[i]=s[index];
s[index]=ch;
}
//按照偶数序列排列
for(i=1; i<s.length(); i+=2)
{
index=i;
for(j=i+2; j<s.length(); j+=2)
{
if(s[j]<s[index])
index=j;
}
ch=s[i];
s[i]=s[index];
s[index]=ch;
}
}
char judge(char ch)
{
switch(ch)
{
case '0':
return '0';
break;
case '1':
return '8';
break;
case '2':
return '4';
break;
case '3':
return 'C';
break;
case '4':
return '2';
break;
case '5':
return 'A';
break;
case '6':
return '6';
break;
case '7':
return 'E';
break;
case '8':
return '1';
break;
case '9':
return '9';
break;
case 'A':
case 'a':
return '5';
break;
case 'B':
case 'b':
return 'D';
break;
case 'C':
case 'c':
return '3';
break;
case 'D':
case 'd':
return 'B';
break;
case 'E':
case 'e':
return '7';
break;
case 'F':
case 'f':
return 'F';
break;
default:
return ch;
}
}
int main()
{
//freopen("input.txt", "r", stdin);
string s1,s2;
while(cin>>s1>>s2)
{
//合并字符串
merge(s1,s2);
//cout<<s1<<endl;
//按照基数和偶数序列排序
sort(s1);
//cout<<s1<<endl;
for(int i=0; i<s1.length(); i++)
cout<<judge(s1[i]);
cout<<endl;
}
return 0;
}