我已尝试过标准方法,但我的答案仍然存在错误。
我的代码:
int main() {
int val;
char str[] = {'1', '45', '0'};
val = str[1] - '0';
printf("Int value = %d\n", val);
return(0);
}
我的回答为5
,而不是45
。
如何解决此问题?
[从comment更新:]
我实际上需要处理一个字符串数组。假设我想将八进制数转换为十进制数,而我的输入必须是一个字符串数组的形式。我希望将这些no.s转换为十进制:{45,17,100}为此,我首先需要提取每个元素并将其更改为整数。你能说一下最好的方法吗?
答案 0 :(得分:1)
我实际上需要处理一个字符串数组
您在此处定义的内容
char str[] = {'1', '45', '0'};
不是字符串数组,而是具有3个元素的{em>一个数组char
。它甚至不是C - "字符串",因为这需要尾随值0
。请注意,字符'0'
的值不是0
,但是,例如,对于ASCII字符集,它是48
。
'45'
是一个多字节字符文字,实际上是一个整数。上面的代码尝试使用这个非常文字来初始化char
- 数组str
(str[1]
的第2个元素,这是char
)。
这不起作用。
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;
}
上面的示例显示了45
在分配给char
时如何截断{/ 1}}。
根据C实现,您使用'45'
到char
的转换甚至可能会调用臭名昭着的未定义行为。这不好。
你似乎想要的是:
#define ARRAY_SIZE_MAX 3
char * str[ARRAY_SIZE_MAX] = {"1", "45", "0"}; /*. Mind the double quotes. */
这定义了一个指向char
的3个指针的数组,每个指针指向一个C - &#34;字符串&#34;。
答案 1 :(得分:1)
这里,你得到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;
}
1
45
0
答案 2 :(得分:-1)
这取决于你想要什么。
每个角色都有自己的int值 - 它只是ASCII码
如果你将遍历整数并使其像%c一样打印,你将得到ASCII表(你可以看到它。there。
但是如果你想从string / char数据类型读取int值,你必须解析它 - atoi (ascii到整数)函数 - 示例there
顺便说一下我不知道你的例子究竟是如何运作的,但问题是你在做什么:int val = '45' - '0';
int值'0'应该是48,'45'我不知道,但'4'是52int并且'5'是53 int,所以类似的东西......
正如我写的那样你应该做int val = atoi('45') - atoi('0')
之类的事情,但肯定可能更好地按照以下方式投射到int int val = (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);
}
不确定,但我认为这应该有效,希望能有所帮助