字符串合并处理

来源:互联网 发布:java发牌器 编辑:程序博客网 时间:2024/05/02 00:45

题目

描述

按照指定规则对输入的字符串进行处理。

详细描述:

将输入的两个字符串合并。

对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。

对排训后的字符串进行操作,如果字符为‘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)

{

}

输入

输入两个字符串

输出

输出转化后的结果

样例输入

dec fab

样例输出

5D37BF

思路

下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
哎。。。注意看要求

代码

#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;int charToInt(char ch){    if(ch>='0'&&ch<='9')    {        return ch-'0';    }    else if(ch>='a'&&ch<='f')    {        return ch-'a'+10;    }    else if(ch>='A'&&ch<='F')    {        return ch-'A'+10;    }    return ch;}char binTiHex(int i){    if(i<10&&i>=0)    {        return static_cast<char>(i+'0');    }    else    {        i-=10;    }    return static_cast<char>(i+'A');}char ProcessChar(char ch){    int first=1;//0001B    int last=0;    int temp = charToInt(ch);    int result = 0;    if(temp<=15)    {        for(int i=0; i<4; ++i)        {            last = first&temp;            result = result|last;            temp=temp>>1;            if(i<3)            {                result=result<<1;            }        }        return binTiHex(result);    }    return ch;    //int result = ((temp&firstTwo)>>2)|((temp&lastTwo)<<2);}int main(){    string str1,str2,str;    vector<char> vec1,vec2;    cin>>str1>>str2;    str=str1+str2;    for(int i=0; i<str.size(); i+=2) //拆分加排序    {        char temp=str[i];        vec1.push_back(temp);    }    for(int i=1; i<str.size(); i+=2)    {        char temp=str[i];        vec2.push_back(temp);    }    sort(vec1.begin(),vec1.end());    sort(vec2.begin(),vec2.end());    for(int i=0; i<vec1.size(); i++) //再合并    {        int j=i*2;        str[j]=vec1[i];    }    for(int i=0; i<vec2.size(); i++)    {        int j=i*2+1;        str[j]=vec2[i];    }    for(int i=0; i<str.size(); ++i)    {        cout<<ProcessChar(str[i]);    }    cout<<endl;    return 0;}

结果图

也可以用switch对每种情况进行划定来提高运算速度

if((s>='0'&&s<='9'))    {        switch (s)        {        case '0':            s='0';            break;        case '1':            s='8';            break;        case '2':            s='4';            break;        case '3':            s='C';            break;        case '4':            s='2';            break;        case '5':            s='A';            break;        case '6':            s='6';            break;        case '7':            s='E';            break;        case '8':            s='1';            break;        case '9':            s='9';            break;        default:            break;        }    }    else if((s>='a'&&s<='f')||(s>='A'&&s<='F'))     {        switch (s)        {        case 'a':        case 'A':            s='5';            break;        case 'b':        case 'B':            s='D';            break;        case 'c':        case 'C':            s='3';            break;        case 'd':        case 'D':            s='B';            break;        case 'e':        case 'E':            s='7';            break;        case 'f':        case 'F':            s='F';            break;        default:            break;        }    }
0 0