字符串合并处理

    xiaoxiao2021-03-25  104

    题目

    描述

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

    详细描述:

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

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

    对排训后的字符串进行操作,如果字符为‘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; } }
    转载请注明原文地址: https://ju.6miu.com/read-23746.html

    最新回复(0)