【華爲機試】字符串合併處理

題目描述

按照指定規則對輸入的字符串進行處理。

詳細描述:

將輸入的兩個字符串合併。

對合並後的字符串進行排序,要求爲:下標爲奇數的字符和下標爲偶數的字符分別從小到大排序。這裏的下標意思是字符在字符串中的位置。

對排序後的字符串進行操作,如果字符爲‘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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章