C++:在转换为 int 并添加时为我的字符数组获取奇怪的值

Posted

技术标签:

【中文标题】C++:在转换为 int 并添加时为我的字符数组获取奇怪的值【英文标题】:C++ : getting strange values for my character array when converting to int and adding 【发布时间】:2017-10-01 20:37:48 【问题描述】:

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

一个数字可以分成不同的连续子序列 部分。假设,一个数字 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 的实际值?

【问题讨论】:

你在哪里做乘法? “每个数字的乘积”意味着您应该将数字相乘。 我的意思是 '+' 是 '*' 。正在调试中! 【参考方案1】:

为了将像'2' 这样的字符值“转换”为整数值2,您只需减去'0' 的ASCII 值,即int valOfDigit = array[k] - '0'

请注意,atoistrtod 在您的情况下不起作用,因为这些函数需要以'\0' 结尾的“字符串”作为输入,而不是单个字符。

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

【讨论】:

这种减法方法效果很好如果输入有效。如果有可能输入无效,您可以使用一个简单的 256 字节查找表。 @tadam:好的,谢谢;但我宁愿检查输入并做出相应的反应,而不是查找表。相应地调整了答案。 isdigit() 是一种针对用户错误进行强化的好方法。好电话。 isdigit 可以通过 256 字节的查找表来实现。【参考方案2】:

您可以使用atoi() 将char * 字符串转换为int。别忘了#include &lt;stdlib.h&gt;

【讨论】:

atoi 需要以 0 结尾的字符串作为输入;我认为这在这种情况下很难实现,输入是array[k]... @frslm 这没有回答问题。【参考方案3】:

或者只使用如下所示的 int 类型转换:(int)

【讨论】:

您可以将 char 转换为 int,但这肯定不会满足 OP 的实际需求。

以上是关于C++:在转换为 int 并添加时为我的字符数组获取奇怪的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字字符串转换为 int 数组 [重复]

如何在 C++ 中将字符串数组转换为整数数组?

c++字符串转化为数字

c++ - 将 8 个位置的 int 数组转换为 char

c++ string int

在 C 中将字符串数组转换为 Int 数组的最佳方法