C++ : getting strange values for my character array when converting to int and adding

标签 c++ arrays

我正在编写代码来解决的问题是:

A number can be broken into different contiguous sub-subsequence parts. Suppose, a number 3245 can be broken into parts like 3 2 4 5 32 24 45 324 245. And this number is a COLORFUL number, since product of every digit of a contiguous subsequence is different. Return 1 if argument int A is a colorful number and return 0 otherwise.

我的代码如下。一切似乎都正常,除了我似乎无法获得 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 的实际值?

最佳答案

用于“转换”字符值,如 '2'到整数值 2 ,您只需减去 '0' 的 ASCII 值,即 int valOfDigit = array[k] - '0' ;

请注意 atoistrtod在您的情况下将不起作用,因为这些功能需要 '\0' - 终止“字符串”作为输入,而不是单个字符。

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

关于C++ : getting strange values for my character array when converting to int and adding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516669/

相关文章:

C++ 递归堆栈

c++ - 具有为实例化固定但随模板参数变化的参数数量的模板方法

python - 在 Python 中连接二维 numpy 数组

C函数返回指针和动态数组

c++ - 帮助在 C++ 中组合两个函数

c++ - 使用 Ncurses (C++) 时不打印宽字符

c - 我对 C 中的数组有疑问(Hackerearth - 查找产品)

arrays - 具有可选子集的无序集(数组)上的匹配表

javascript - 将具有 className 的元素添加到具有 idName 的其他元素

c++ - 在多线程环境中交换 c++ 映射对象