C ++:转换为int并添加

时间:2017-10-01 20:37:48

标签: c++ arrays

我编写要解决的代码的问题是:

  

可以将数字分解为不同的连续子子序列   部分。假设,数字3245可以分成3 2 4 5等部分   32 24 45 324 245.这个数字是一个很奇怪的数字,因为产品   连续子序列的每个数字都是不同的。如果返回1   参数int A是一个彩色数字,否则返回0.

我的代码如下。一切似乎都在起作用,除非我似乎无法获得int result或更具体(int)array[k]的正确值。对于23号,我得到2的总和为51,2 + 3为101,3和为51.这里发生了什么?我相信我的语法是正确的(?)。

int Solution::colorful(int A) {
    int result=0;
    unordered_map<int,int> map1;

    string s = to_string(A);
    const char array = s.c_str();
    int n = s.length();

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            result = 0;
            for (int k = i; k <=j; k++) {
                result += (int)array[k];
            }
            if (map1.find(result) == map1.end()) {
                map1.insert({result,0});
            }
            else {
                return 0;
            }
        }
    }
    return 1;
}

编辑 - 好吧我觉得这件事发生了。我得到的是字符值,而不是整数值。如何将字符2转换为实际值2?

3 个答案:

答案 0 :(得分:3)

对于&#34;转换&#34;像'2'这样的字符值为整数值2,您只需减去'0'的ASCII值,即int valOfDigit = array[k] - '0';

请注意atoistrtod在您的情况下不起作用,因为这些函数需要'\0' - 终止&#34;字符串&#34;作为输入,而不是单个字符。

此外,为了确保您的输入仅包含数字,您可以检查每个array[k],例如使用isdigit(array[k])(array[k] >= '0' && array[k] <= '9')

答案 1 :(得分:0)

您可以使用atoi()char *字符串转换为int。别忘了#include <stdlib.h>

答案 2 :(得分:-2)

或者只使用如下所示的int cast:(int)