美文网首页
alibaba 字符串编程题

alibaba 字符串编程题

作者: yangqi916 | 来源:发表于2017-03-02 15:27 被阅读0次
    阿里内推编程题.png

    考点

    • 十六进制的字符串怎么处理?
      我们可以将其转化成二进制的字符串处理(c++ 里先转化成数字,在通过&1 取每一位,来得到每一位,构成字符串去操作), 或者转化成一个数字,再去位操作。

    • 位操作
      让他匹配的关键是位操作&来取出需要的位,在通过异或^来判断字符串与模式是否匹配

    #include <iostream>
    #include <vector>
    #include <numeric>
    #include<limits>
    #include <sstream>
    using namespace std;
    
    /** 请完成下面这个函数,实现题目要求的功能 **/
    /** 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^  **/
    
    void deletePrefixZeros(string& str) {
        while (str.size() > 1 && str[0] == '0') {
            str.erase(0, 1);
        }
    }
    
    // check whether string has illegal char
    bool isValid(string& str) {
        int length = (int)str.size();
        
        for(int i = 0; i < length; i++) {
            if( !((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'A' && str[i] <= 'F'))) {
                return false;
            }
        }
        
        return true;
    }
    
    // empty string "" means input string illegal
    string Decode(string in) {
        
        bool isLegal = isValid(in);
        if(!isLegal)
            return "";
        
        deletePrefixZeros(in);
        
        if (in.length() > 8) {
            return "";
        }
        
        int num = 0;
        stringstream ss;
        ss << hex << in;
        ss >> hex >> num;
        
        
        
        if( ((num & 0x80) ^ 0) == 0) {
            if(num >= 0 && num <= 127)
            {
                ss << num;
                string result;
                ss >> result;
                return result;
            }
            else{
                return "";
            }
        }
        else if( ((num & 0xE0C0) ^ 0xC080) == 0) {
            int trueNum = 0;
            num = num & 0x1F3F;
            
            trueNum += (num & 0xFF);
            num = num & 0xFF00;
            num = num >> 2;
            trueNum += num;
            
            stringstream sss;
            
            sss << trueNum;
            string result;
            sss >> result;
            return result;
        }
        else if( ((num & 0xF0C0C0) ^ 0xE08080) == 0) {
            // to do
        }
        else if( ((num & 0xF8C0C0C0) ^ 0xF0808080) == 0) {
           // to do
        }
        else
            return "";
        
        printf("haha");
        
        return "";
    }
    
    int main() {
        string res;
        
        string _in("C280");
        
        res = Decode(_in);
        cout << res << endl;
        
        return 0;
        
    }
    

    相关文章

      网友评论

          本文标题:alibaba 字符串编程题

          本文链接:https://www.haomeiwen.com/subject/ebnhgttx.html