假设这里是C中未知数字编号的字符:
char char_id[1000] = {'1', '2', '3', ..., '8', '9', '\0'};
如果我想要最后两位数字形成一个整数,即'89'。
最简单的方法是什么?
答案 0 :(得分:2)
我假设您想要获取最后两个(非NUL)字符并将它们转换为int
变量。可以通过多种方式完成:
这是一种方式:
int main(void) {
int n;
char char_id[1000] = {'1', '2', '3', '8', '9', '\0'};
size_t len = strlen(char_id);
if (len >= 2)
{
n = atoi(&char_id[len-2]);
printf("%d\n", n);
}
else
{
printf("string too short\n");
}
return 0;
}
输出:
89
另一种转换可能是:
n = strtol(&char_id[len-2], NULL, 10);
答案 1 :(得分:2)
可能是这个
char char_id[1000] = {'1', '2', '3', /*..., */ '8', '9', '\0'};
int what_i_want = atoi( char_id + ( strlen(char_id) - 2 ) );
顺便说一句,这些点有些垃圾,请评论
答案 2 :(得分:0)
atoi
功能即可。
size_t pos = strlen(char_id);
int num = atoi(&char_id[pos-2]);
或者只是
int num = (char_id[pos-2]-'0')*10+(char_id[pos-1]-'0');
第一个解决方案使用ASCII编码 - 这使得该解决方案无法在不同平台上进行处理。
使用null
字符。 \0
。
如果是数字,那么您可以轻松地在此处显示第二种方式。
答案 3 :(得分:0)
您将整个号码存储为char_id
中的字符串。
您需要首先获取您想要数字的字符串的开头。
由于你想要最后两位数字,一个简单的方法是 -
char *sub_string = char_id + (strlen(char_id) - 2);
这假设最后有\0
。如果你没有,但知道整个数组已经填满,你可以使用sizeof(char_id)
。
现在您需要一种可靠的方法来提取存储的整数。
我建议使用sscanf
。
int number;
if(sscanf(sub_string, "%d", &number) != 1) {
printf ("Invalid number in string");
// Exit?
}
printf("Number scanned = %d\n", number);
答案 4 :(得分:0)
这是将字符串转换为int的简单函数。
int str2int(char *numStr)
{
int intVal=0 ;
while(*numStr != '\0')
{
intVal *= 10;
intVal += *numStr - '0'; //0x30 ascii value of charater 0
numStr++;
}
return intVal;
}
要转换最后2位数字,您可以传递该数字的地址,例如& char_id [5]
答案 5 :(得分:0)
我实现了此功能。
int char_to_int(char *ptr, int length)
{
int sum = 0;
while(length--)
{
sum += (pow(10, length) * ((*ptr++) - 48));
}
return sum;
}
您应该那样使用
...
int number = char_to_int((char_id + 7), 2);
...