alibaba 字符串编程题

2017-03-02  本文已影响0人  yangqi916
阿里内推编程题.png

考点

#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;
    
}
上一篇下一篇

猜你喜欢

热点阅读