两个字符串合并、排序和转换
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”.
PS:顺便吐槽下大华为的OJ平台。。。尼玛明明是相同一段代码非得第二次提交才可以通过,这么2==
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘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==
相关文章推荐
- Android控件——TextView、EditText、ImageView、Button、ImageButton
- 二叉树遍历(图解)
- [Linux] - CentOS IP设置方法
- login incorrect
- GCD 综合使用示例
- 【Hadoop系列】第一章:Hadoop生态系统概述以及版本演化
- PHP 文件创建/写入
- iOS中对时间的处理(二)——获取时间及星期
- Android反编译工具Apktool使用
- 数据结构基础 图的遍历(二) 之 BFS
- 深入理解Spring Redis的使用 (一)、Spring Redis基本使用
- shell中的点命令与source命令
- openwrt之vim
- 数据库中的一部分运算符
- 谈谈Linux应用程序 ABI兼容性
- Matlab spline
- php动态链接扩展库
- 华为 三层交换机VLAN间路由配置详解
- iterator迭代遍历
- Eclipse + CDT引入OpenCV失败的解决办法