将字符串字符转换为int

时间:2017-05-18 10:00:07

标签: c string

基本上,我有这个非常长的数字字符串:

char *number = "insert really long number";

现在我想对此字符串中包含的各个数字执行数学运算,假设如下(将此字符串中的两个连续数字加起来称为字符数组):

sum = number[i] + number[i+1];

但是,这不会产生正确的结果,它会返回一个垃圾值。我知道如何使用printf提取单个值,例如:

printf("%c", number[i]);

但是如何让这个%c在上面的计算中使用?我尝试使用atoi,但我得到“错误:指针转换不兼容的整数,将'char'传递给'const char *'类型的参数;将地址带为&”。

4 个答案:

答案 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