題目描述
按照指定規則對輸入的字符串進行處理。
詳細描述:
將輸入的兩個字符串合併。
對合並後的字符串進行排序,要求爲:下標爲奇數的字符和下標爲偶數的字符分別從小到大排序。這裏的下標意思是字符在字符串中的位置。
對排序後的字符串進行操作,如果字符爲‘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”
功能:字符串處理
輸入:兩個字符串,需要異常處理
輸出:合併處理後的字符串,具體要求參考文檔
返回:無
輸入描述:
輸入兩個字符串
輸出描述:
輸出轉化後的結果
分析:此題過程有點複雜,先把2個字符串合併,然後安奇偶在分開成2個字符串,然後在各自排序,排序後在合併,還沒完,還要把每個字符進行變換,計算量有點大,按規定時間做完還是有難度的,因此前面分開合併在合併的過程不能簡化,就簡化後面的變換過程,16個字符對應另外的16個字符。程序如下:
程序:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s1,s2;
string temp="084C2A6E195D3B7F";
while(cin>>s1>>s2){ //不能用getline(cin,s1),用了會出錯,不知道爲什麼,在這裏磕了好久;
string s=s1+s2; //把s1和s2合爲一個字符串s;
int i=0,j=0;
s1="";s2="";
while(i<s.size()) { //把s按奇偶分成2個字符串;
if(i<s.size()) s1+=s[i++];
if(i<s.size()) s2+=s[i++];
}
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
s="";
i=0;
while(i<s1.size()||j<s2.size()){ //排序後合成一個字符串;
if(i<s1.size()) s+=s1[i++];
if(j<s2.size()) s+=s2[j++];
}
for(int i=0;i<s.size();i++){ //對每個字符進行變換;
if(s[i]>='0'&&s[i]<='9') s[i]=temp[s[i]-'0'];
else if(s[i]>='a'&&s[i]<='f') s[i]=temp[s[i]-'a'+10];
else if(s[i]>='A'&&s[i]<='F') s[i]=temp[s[i]-'A'+10];
}
cout<<s<<endl;
}
return 0;
}