Convert from char to int OR Convert from int to char

      //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';
                 }

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值