您的位置:首页 > 其它

两个字符串合并、排序和转换

2015-07-11 16:59 225 查看
按照指定规则对输入的字符串进行处理。

详细描述:

将输入的两个字符串合并。

对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。

对排训后的字符串进行操作,如果字符为‘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”.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string maopao(string s)//冒泡法
{
char temp;
for(string::size_type i=0;i!=s.size();++i)
{
for(string::size_type j=0;j!=s.size()-i-1;++j)
{
if(s[j]>=s[j+1])
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
return s;
}
void Change(char &s)
{
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;
}
}
}

int main()
{
string s1,s2,s;
vector<char>a,b;
////第一张读取方式
//cin>>s1;
//getchar();
//cin>>s2;
//第二种读取方式
cin>>s1>>s2;
s=s1+s2;   //先合并
for(int i=0;i<s.size();i+=2)//拆分加排序;拆分方法1:用到vector
{
char temp=s[i];
a.push_back(temp);
}
for(int i=1;i<s.size();i+=2)
{
char temp=s[i];
b.push_back(temp);
}
sort(a.begin(),a.end());//再进行排序STL
sort(b.begin(),b.end());
//拆分方案2
string temp1,temp2;
for(string::size_type i=0;i!=s.size();++i)//拆分的方法2
{
if(i%2==0)//先排下标为偶数
{
temp1+=s[i];
}
else
{
temp2+=s[i];
}
}
temp1 = maopao(temp1);//采用冒泡法进行排序
temp2 = maopao(temp2);

//合并方案1:
for(int i=0;i<a.size();i++)//再合并
{
int j=i*2;
s[j]=a[i];
}
for(int i=0;i<b.size();i++)
{
int j=i*2+1;
s[j]=b[i];
}
//合并方案2:
string s0;//方案2的合并结果
s0 =temp1+temp2;
string::size_type m=0,n=0;
for(int i=0;i<s.size();i++)
{
if(i%2 == 0)//偶数位置
{
s0[i] = temp1[m];
++m;
}
else if(i%2 !=0)
{
s0[i] =temp2
;
++n;
}
}
//cout<<s<<endl;//对字符串进行排序的结果!
//对字符串采用方法二进行排序:

for (int i=0;i<s.size();i++)
Change(s[i]);
cout<<s<<endl;
}


PS:顺便吐槽下大华为的OJ平台。。。尼玛明明是相同一段代码非得第二次提交才可以通过,这么2==
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: