import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Test60 {
/*
题目描述
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从
小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘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
*/
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
while(scn.hasNext()){
String str1=scn.next();
String str2=scn.next();
processString(str1, str2);
}
//String str1="dec";
//String str2="fab";
//processString(str1, str2);
//charToChar('D');
}
public static void processString(String str1,String str2){
String str=str1+str2;
char[] chs=str.toCharArray();
List<Character> list1=new ArrayList<Character>();
List<Character> list2=new ArrayList<Character>();
for (int i = 0; i < chs.length; i++) {
if((i&1)==0){
list1.add(chs[i]);
}else{
list2.add(chs[i]);
}
}
Collections.sort(list1);
Collections.sort(list2);
//System.out.println(list1.toString());
//System.out.println(list2.toString());
List<Character> list=new ArrayList<Character>();
int count=0;
int count1=0;
int count2=0;
while(count<str.length()){
if((count&1)==0){
list.add(list1.get(count1++));
}else{
list.add(list2.get(count2++));
}
count++;
}
//System.out.println(list);
for (int i = 0; i < list.size(); i++) {
char c=charToChar(list.get(i));
list.remove(i);
list.add(i, c);
}
//System.out.println(list);
//System.out.println(list.toString());
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
System.out.println();
}
public static char charToChar(char ch){
String st=null;
if(!(ch>='0'&&ch<='9'||ch>='a'&&ch<='f'||ch>='A'&&ch<='F')){
return ch;
}
if(ch>='0'&&ch<='9'){
st=Integer.toBinaryString(ch-'0');
}else{
if(ch>='A'&&ch<='Z'){
ch+=32;
}
st=Integer.toBinaryString(ch-'a'+10);
}
StringBuffer sb=new StringBuffer(st);
sb.reverse();
//System.out.println(sb.length());
int len=sb.length();
for (int i = 0; i < 4-len; i++) {
sb=sb.append("0");
//System.out.println(sb);
}
st=sb.toString();
//System.out.println(st);
int result=0;
for (int i = 0; i < 4; i++) {
result+=(st.charAt(i)-'0')*Math.pow(2, 3-i);
}
//System.out.println(result);
char fin='0';
if(result>=0&&result<=9){
fin+=result;
//System.out.println(fin);
return fin;
}else{
//System.out.println((char)(result-10+'A'));
return (char)(result-10+'A');
}
}
}