華爲機試-字符串合併處理

題目描述

將輸入的兩個字符串合併。
對合並後的字符串進行排序,要求爲:下標爲奇數的字符和下標爲偶數的字符分別從小到大排序。這裏的下標意思是字符在字符串中的位置。
對排序後的字符串進行操作,如果字符爲‘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”

說明:
排序:利用動態數組存放偶串和奇串(方法1),如果容器使用不熟練,也可以使用string(方法2),
轉換:

方法1:

#include<iostream>
#include<string>          //字符串處理
#include<algorithm>       //排序
#include<vector>          //動態數組用於存放奇偶子串
using namespace std;

//排序
vector<char> Sort(string str)
{
        vector<char> odd_str,even_str;
        int i;

        for(i=0;i<str.size();i+=2)
        {
            even_str.push_back(str[i]);//偶數位置子串
            if(i+1<str.size())
                odd_str.push_back(str[i+1]);//奇數位置子串
        }           
        sort(even_str.begin(),even_str.end());
        sort(odd_str.begin(),odd_str.end());

        vector<char>final_str;
        for(i=0;i<even_str.size();i++)
        {
            final_str.push_back(even_str[i]);
            if(i<odd_str.size())
                final_str.push_back(odd_str[i]);
        }
        return final_str;
}
//轉換
vector<char> Convert(vector<char> &c)
{
    vector<char> result;
    char conv[16]={'0','8','4','C','2','A','6','E','1','9','5','D','3','B','7','F'};
    char temp;
    for(int i=0;i<c.size();i++)
    {       
        if(c[i]>='0' && c[i]<='9')//數字
            temp=conv[c[i]-'0'];
        else if(c[i]>='a' && c[i]<='f')
            temp=conv[c[i]-'a'+10];
        else if(c[i]>='A' && c[i]<='F')
            temp=conv[c[i]-'A'+10];
        else
            temp=c[i];
        result.push_back(temp);       
    }
    return result;
}

int main() 
{
    string s1,s2;
    while(cin>>s1>>s2)
    {
        string merge_str=s1+s2;//合併
        vector<char> mystr=Convert(Sort(merge_str));

        for(int i=0;i<mystr.size();i++)
            cout<<mystr[i];
        cout<<endl;     
    }
    return 0;   
}

方法2:

string Sort(string str)
{
    string odd_str,even_str;
    int i;

    for(i=0;i<str.size();i++)
    {
        if(i%2==0)
            even_str+=str[i];//偶數位置子串
        else
            odd_str+=str[i+1];//奇數位置子串
    }
    //排序,默認升序
    sort(even_str.begin(),even_str.end());
    sort(odd_str.begin(),odd_str.end());

    for(i=0;i<str.size();i++)
    {
        if(i%2==0)
            str+=even_str[i/2];
        else
            str+=odd_str[i/2];
    }
    return str;
}
發佈了56 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章