题目
描述
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘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;
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 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;
}
}
转载请注明原文地址: https://ju.6miu.com/read-23746.html