題目描述
按照指定規則對輸入的字元串進行處理。
較長的描述:
将輸入的兩個字元串合并。
對合并後的字元串進行排序,要求為:下标為奇數的字元和下标為偶數的字元分别從小到大排序。這裡的下标意思是字元在字元串中的位置。
對排序後的字元串進行操作,如果字元為‘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)
{
}
輸入描述:
輸入兩個字元串
輸出描述:
輸出轉化後的結果
解決思路:
1.按照題目要求先将對應變換儲存在兩個字元串中:
const string string1=“0123456789abcdefABCDEF”;
const string string2=“084C2A6E195D3B7F5D3B7F”;
2.輸入兩個字元串s1,s2;
3.将字元串無序連接配接s=s1+s2;
4.将連接配接後的字元串s,按下标的奇偶分别放入字元串str1,str2中;
5.将str1,str2升序排序;
6.将排序後的兩個字元串再次按照下标合并到str中;
7.周遊str字元串,如果有符合要求的則變換該位;
示例1
輸入
dec fab
輸出
5D37BF
解決代碼:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const string string1="0123456789abcdefABCDEF";
const string string2="084C2A6E195D3B7F5D3B7F";
int main()
{
string s1,s2;
while(cin>>s1>>s2)
{
string s,str1,str2,str;
s=s1+s2;
for(int i=0;i<s.length();i++)
{
if(i%2!=0)
{
str1+=s[i];
}
else
{
str2+=s[i];
}
}
sort(str1.begin(),str1.end());
sort(str2.begin(),str2.end());
for(int j=0;j<s.length();j++)
{
if(j%2!=0)
{
str+=str1[j/2];
}
else
{
str+=str2[j/2];
}
}
for(int k=0;k<str.length();k++)
{
int n=string1.find(str[k]);
if(n!=-1)
{
str[k]=string2[n];
}
}
cout<<str<<endl;
}
return 0;
}
牛客網運作結果: