题目
描述
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘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 <string>
#include <vector>
#include <algorithm>
using namespace std;
int charToInt(char ch)
{
if(ch>='0'&&ch<='9')
{
return ch-'0';
}
else if(ch>='a'&&ch<='f')
{
return ch-'a'+10;
}
else if(ch>='A'&&ch<='F')
{
return ch-'A'+10;
}
return ch;
}
char binTiHex(int i)
{
if(i<10&&i>=0)
{
return static_cast<char>(i+'0');
}
else
{
i-=10;
}
return static_cast<char>(i+'A');
}
char ProcessChar(char ch)
{
int first=1;//0001B
int last=0;
int temp = charToInt(ch);
int result = 0;
if(temp<=15)
{
for(int i=0; i<4; ++i)
{
last = first&temp;
result = result|last;
temp=temp>>1;
if(i<3)
{
result=result<<1;
}
}
return binTiHex(result);
}
return ch;
//int result = ((temp&firstTwo)>>2)|((temp&lastTwo)<<2);
}
int main()
{
string str1,str2,str;
vector<char> vec1,vec2;
cin>>str1>>str2;
str=str1+str2;
for(int i=0; i<str.size(); i+=2) //拆分加排序
{
char temp=str[i];
vec1.push_back(temp);
}
for(int i=1; i<str.size(); i+=2)
{
char temp=str[i];
vec2.push_back(temp);
}
sort(vec1.begin(),vec1.end());
sort(vec2.begin(),vec2.end());
for(int i=0; i<vec1.size(); i++) //再合并
{
int j=i*2;
str[j]=vec1[i];
}
for(int i=0; i<vec2.size(); i++)
{
int j=i*2+1;
str[j]=vec2[i];
}
for(int i=0; i<str.size(); ++i)
{
cout<<ProcessChar(str[i]);
}
cout<<endl;
return 0;
}
也可以用switch对每种情况进行划定来提高运算速度
if((s>='0'&&s<='9'))
{
switch (s)
{
case '0':
s='0';
break;
case '1':
s='8';
break;
case '2':
s='4';
break;
case '3':
s='C';
break;
case '4':
s='2';
break;
case '5':
s='A';
break;
case '6':
s='6';
break;
case '7':
s='E';
break;
case '8':
s='1';
break;
case '9':
s='9';
break;
default:
break;
}
}
else if((s>='a'&&s<='f')||(s>='A'&&s<='F'))
{
switch (s)
{
case 'a':
case 'A':
s='5';
break;
case 'b':
case 'B':
s='D';
break;
case 'c':
case 'C':
s='3';
break;
case 'd':
case 'D':
s='B';
break;
case 'e':
case 'E':
s='7';
break;
case 'f':
case 'F':
s='F';
break;
default:
break;
}
}