我有一个带数字的字符串"a“(例如”我有4个苹果“),我试图把数字"4”放到一个int变量中,而不给我ASCII码,在本例中是“52”(ASCII4是52)。
我试过int y = (int)a[8],但它不起作用。
发布于 2021-02-08 22:11:58
如果消息的形状与示例中给出的形状完全相同,那么您可以尝试下面代码的第一部分。
sscanf()函数分析字符串,可以匹配文字以及您在变量中提取的值。
编辑
还提供了一个更灵活的版本,以便检测字符串中任何位置的整数。这个想法是用%s逐个提取单词,并跳过它们,这要归功于%n已知的结束位置,直到这样的单词被认为是整数。
/**
gcc -std=c99 -o prog_c prog_c.c \
-pedantic -Wall -Wextra -Wconversion \
-Wc++-compat -Wwrite-strings -Wold-style-definition -Wvla \
-g -O0 -UNDEBUG -fsanitize=address,undefined
**/
#include <stdio.h>
int
main(void)
{
// fixed shape for the message
const char *msg="I have 4 apples";
int number=-1;
if(sscanf(msg, "I have %d apples", &number)==1)
{
printf("number=%d\n", number);
}
// more flexible version
const char *msg2="Number 5 appears here";
while(*msg2!='\0')
{
char word[20]="";
int pos=-1;
sscanf(msg2, "%s%n", word, &pos);
int number=-1;
if(sscanf(word, "%d", &number)==1)
{
printf("number=%d\n", number);
break;
}
msg2+=pos; // skip this word
}
return 0;
}发布于 2021-02-08 22:12:04
我倾向于这样做的方法是从它中减去'0'。
例如:
char x = '8';
int y = x - '0';字符通常只是一个整数,而ASCII码的数字是连续的,所以如果你能得到从'0'到你的数字的偏移量,你就得到了数字的值。
https://stackoverflow.com/questions/66103247
复制相似问题