天天看點

華為筆試:字元串合并處理

題目描述

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

較長的描述:

将輸入的兩個字元串合并。

對合并後的字元串進行排序,要求為:下标為奇數的字元和下标為偶數的字元分别從小到大排序。這裡的下标意思是字元在字元串中的位置。

對排序後的字元串進行操作,如果字元為‘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;
}
           

牛客網運作結果:

華為筆試:字元串合并處理

繼續閱讀