//This is a feasible answer for '1_SRM_144DIV1-300' on topCoder. class BinaryCode{ public: vector<string> decode(string message) { int len = message.size(); vector<string> vec; if(len == 0){ cout << "No data" << endl; return vec; } string zeroBg = convert(message,'0'); //assume the original binary code begin with '0' string oneBg = convert(message,'1'); //assume the original binary code begin with '1' vec.push_back(zeroBg); vec.push_back(oneBg); return vec; } private: string convert(const string& message,char guess){ int len = message.size(); string d_str(len,'0');//allocate len size space for d_str ,which is used to store original binary code d_str[0] = guess; for(string::size_type i = 1; i < len; ++i){ if(i == 1) //将char类型转换为int类型,调用自定义的函数cToi,从整形转换为字符类型可使用在char类型的'0'的基础上加一整形实现。 //例如:将int型的2转换为字符型的'2',可采用'0' + 2,或者将char型的'2'转换为int型的2,可采用'2' - '0'; d_str[i] += cToi(message[i - 1]) - cToi(d_str[i - 1]); else d_str[i] += cToi(message[i - 1]) - cToi(d_str[i - 1])- cToi(d_str[i - 2]); if(cToi(d_str[i]) >= 2){ d_str = "NONE"; break; } } if(d_str != "NONE") if( (len == 1 && message[0] != d_str[0]) || (cToi(message[len - 1]) != cToi(d_str[len - 1]) + cToi(d_str[len - 2])) ) d_str = "NONE"; return d_str; } size_t cToi(char ch){ return ch - '0'; } }
Convert from char to int OR Convert from int to char
最新推荐文章于 2022-10-28 09:48:33 发布