将char *的一部分转换为int

时间:2011-12-08 06:34:38

标签: c char int fgets

我正在尝试将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')。

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)

你没有很好地定义你的意思是字符串的一部分?它总是第6个字符 - 索引5吗?

您可以使用strtolatoisscanf

答案 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);