C 如何将字符数组中的每个字符转换为整数?

C 如何将字符数组中的每个字符转换为整数?,c,initialization,literals,C,Initialization,Literals,我试过标准的方法,但我的答案还是有错误 我的代码: int main() { int val; char str[] = {'1', '45', '0'}; val = str[1] - '0'; printf("Int value = %d\n", val); return(0); } 我得到的答案是5,而不是45 我如何解决这个问题 [更新自:] 我实际上需要处理一个字符串数组。假设我想把八进制数转换成十进制数,我的输入必须是字符串数组的形式。我

我试过标准的方法,但我的答案还是有错误

我的代码:

int main() {   
   int val;
   char str[] = {'1', '45', '0'};

   val = str[1] - '0';

   printf("Int value = %d\n", val);

   return(0);
}
我得到的答案是
5
,而不是
45

我如何解决这个问题


[更新自:]


我实际上需要处理一个字符串数组。假设我想把八进制数转换成十进制数,我的输入必须是字符串数组的形式。我希望将这些编号转换为十进制:{45,17100},因为我首先需要提取每个元素并将其更改为整数。你能建议一下最好的方法是什么吗

这取决于你想要什么

每个字符都有自己的int值——它只是ASCII码

若您将迭代整数并使其像%c一样打印,您将得到ASCII表(您可以看到它,例如)

但是,如果您想从string/char数据类型中读取int值,则必须解析它-atoi(ascii到整数)函数-示例

顺便说一句,我不知道您的示例是如何工作的,但问题是您正在执行以下操作:
int val='45'-'0';
int'0'的int值应该是48,'45'rly我不知道,但是'4'是52int,'5'是53 int,所以类似的东西

正如我写的那样,您应该做一些类似于
intval=atoi('45')-atoi('0')
的事情,当然最好是按照如下方式转换为int
intval=(int)(atoi('45')-atoi('0'))
——在您的示例中就是asi

int main() {   
   int val;
   char str[] = {'1', '45', '0'};

   val = (int) (atoi(str[1]) - atoi('0'));

   printf("Int value = %d\n", val);

   return(0);
}
不确定,但我认为这应该有效,希望能有所帮助

我实际上需要处理一个字符串数组

你在这里定义了什么

  char str[] = {'1', '45', '0'};
不是一个字符串数组,而是一个包含3个元素的
char
数组。它甚至不是一个C-“字符串”,因为这需要一个
0
的尾随值。请注意,字符
'0'
的值不是
0
,但是,例如,对于ASCII字符集,它是
48

'45'
是一个多字节字符文字,它实际上是一个整数。上面的代码尝试使用这个文字初始化
字符
-str
-array
的第二个元素(
str[1]
,它是一个
字符

这是行不通的

char
不能(必须)保存此多字节字符文本的
int
值。在这种情况下,
str[1]
的初始化溢出,导致
5
的意外值

要查看问题,请尝试以下代码:

#include <limits.h>
#include <stdio.h>


int main(void)
{
  char c_min = CHAR_MIN;
  char c_max = CHAR_MAX;
  unsigned char uc = '45';

  printf("'1'=%d\n", '1');
  printf("'45'=%d\n", '45');
  printf("'0'=%d\n", '0');

  printf("lowest possible value for char=%d\n", c_min);
  printf("highest possible value for char=%d\n", c_max);

  printf("'45' converted to an (unsigned) char=%u\n", uc);

  return 0;
}

这定义了一个由3个指向字符的指针组成的数组,每个指针指向一个C-“字符串”。

这里,你得到的是5而不是45,因为st[1]=“5”,这是因为我们只有0到9个整数的ASCII值,45没有ASCII值。 要在字符串中存储45,必须声明多维字符串。 例如:

char st[3][3]={'1', '45', '0'};
以下是工作代码:

#include<stdio.h>
int main(){
    int i,ans,j;
    char st[3][3]={{'1'}, {'4','5'},{'0'}};
    for(j=0;j<3;j++){
        for(i=0;st[j][i]>=48 && st[j][i]<=57;i++){
            ans=st[j][i]-'0';
            printf("%d",ans);
        }
        printf("\n");
     }
     return 0;
}

char
是和整数类型。您的问题是什么,您想实现什么?
'45'
是一个多字符常量。有关详细信息,请参阅。查看编译器在编译所示代码时告诉您的信息。
atoi()
接受
char
-数组或
char
-指针,但不接受
char
,也不接受
int
str[1]
是一个
字符
'0'
字符
文字,类型为
int
。要使代码完全可移植,即独立于ASCII字符集,您需要将两个幻数
48
更改为
'0'
57
更改为
'9'
#include<stdio.h>
int main(){
    int i,ans,j;
    char st[3][3]={{'1'}, {'4','5'},{'0'}};
    for(j=0;j<3;j++){
        for(i=0;st[j][i]>=48 && st[j][i]<=57;i++){
            ans=st[j][i]-'0';
            printf("%d",ans);
        }
        printf("\n");
     }
     return 0;
}
1
45  
0