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')
的事情,当然最好是按照如下方式转换为intintval=(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