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'
;
请注意,atoi
或 strtod
在您的情况下不起作用,因为这些函数需要以'\0'
结尾的“字符串”作为输入,而不是单个字符。
此外,为确保您的输入仅包含数字,您可以检查每个 array[k]
,例如通过使用isdigit(array[k])
或(array[k] >= '0' && array[k] <= '9')
。
【讨论】:
这种减法方法效果很好如果输入有效。如果有可能输入无效,您可以使用一个简单的 256 字节查找表。 @tadam:好的,谢谢;但我宁愿检查输入并做出相应的反应,而不是查找表。相应地调整了答案。isdigit()
是一种针对用户错误进行强化的好方法。好电话。
isdigit
可以通过 256 字节的查找表来实现。【参考方案2】:
您可以使用atoi() 将char *
字符串转换为int。别忘了#include <stdlib.h>
。
【讨论】:
atoi
需要以 0 结尾的字符串作为输入;我认为这在这种情况下很难实现,输入是array[k]
...
@frslm 这没有回答问题。【参考方案3】:
或者只使用如下所示的 int 类型转换:(int)
【讨论】:
您可以将char
转换为 int
,但这肯定不会满足 OP 的实际需求。以上是关于C++:在转换为 int 并添加时为我的字符数组获取奇怪的值的主要内容,如果未能解决你的问题,请参考以下文章