我正在尝试将char *的一部分转换为int。例如,如果用户输入“步骤783”。我想将783转换为int。
char buffer[100];
char* input = fgets(buffer, sizeof buffer, stdin)
int i = input[5] - '0'; //assume location 5 is where the number will start
printf("%i", i);
现在,此代码只打印出第一个数字('7')。
答案 0 :(得分:3)
您可以使用普通转换功能,从所需位置开始:
int i = atoi(input + 5);
long int j = strtol(input + 5, NULL, 0);
第二个strtol()
,如果你想找出结束的数字(通过第二个参数,see manual),它会特别有用。
答案 1 :(得分:1)
如果总是在数字之前有一个空格,并且这些单词总是两个,如“步骤123”。
然后下面是有效的代码。
int main ()
{
char str[] ="tring 7532";
char *pch1,*pch2;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch1 = strtok (str," ");
pch2= strtok (NULL, " ");
int a=strtol(pch2,(char **)NULL,10);
printf ("the number is: %d\n",a);
return 0;
}
264> ./a.out
Splitting string "tring 7532" into tokens:
the number is: 7532
答案 2 :(得分:0)
答案 3 :(得分:0)
因为你只是转换了第一个数字。
如果它始终是一个3位数字:
int i = 100 * int(input[5] - '0') + 10 * int(input[5] - '0') + int(input[5] - '0')
答案 4 :(得分:0)
你必须从头到尾移动并检查它是否在数字ascii下,然后将其转换为数字
int digit = 0; i = 0;
while(input[i] != '\0'){
if(input[i] >= 48 && input[i] <= 57){
int temp = input[i] - '0';
digit = digit*10 + temp;
}
i++;
}
printf("%i", digit);
答案 5 :(得分:0)
您可以在技术上使用提议的方法之一,但如果您需要非常强大的处理,可能会需要某种解析器。
您应检查是否有关键字“step”,然后是空格,然后以有效格式输入数字。
例如:如果用户只输入“s 1”而不是“step 1”,该怎么办?你想在输入结束后开始阅读吗?或者如果他进入“step [space] [space] -2342344234234234233333”等等。
答案 6 :(得分:0)
char *p;
int i;
p = strchr(input, ' ');
i = atoi(p);