基本上,我有这个非常长的数字字符串:
char *number = "insert really long number";
现在我想对此字符串中包含的各个数字执行数学运算,假设如下(将此字符串中的两个连续数字加起来称为字符数组):
sum = number[i] + number[i+1];
但是,这不会产生正确的结果,它会返回一个垃圾值。我知道如何使用printf提取单个值,例如:
printf("%c", number[i]);
但是如何让这个%c在上面的计算中使用?我尝试使用atoi
,但我得到“错误:指针转换不兼容的整数,将'char'传递给'const char *'类型的参数;将地址带为&”。
答案 0 :(得分:8)
1)atoi
接受字符串而不是单个字符
2)如果你只想转换一个ACSII char 0 - 9,只需使用以下代码:
if(rChar >= '0' && rChar <= '9')
val = rChar - '0';
答案 1 :(得分:3)
你可能想要这个:
char *number = "123";
int n = 0;
char c;
for (int i = 0; c = number[i]; i++)
{
n += number[i] - '0';
}
printf("n = %d\n", n);
答案 2 :(得分:2)
对于任何表示为数据类型char的数字,您可以从“0”中减去该数字,以获得整数类型的数字。
例如:
char a = '5';
int num = a - '0';
//num will store 5
为什么会这样?
因为如果你检查'5'的ASCII值是53,而'0'则是48.所以差值是5.这将用于将字符形式的任何数字转换为整数。
“0”的ASCII值为48,“1”的ASCII值为49,依此类推。因此从'0'减去导致给出ASCII值的差异。
以下是ASCII值的链接:http://www.asciitable.com/
答案 3 :(得分:0)
atoi
将字符串(const char*
)转换为int
,如果您给它char
它将无效。将char
转换为int
的解决方案是使用ASCII表:
char c = '9'
int v = c - '0'; // v == 9