C:字符串,例如"是abcde123"到int 123

时间:2017-02-17 20:20:34

标签: c string function int type-conversion

我的问题非常简单。如果在实际整数之前有任意数量的冗余字符,C中是否有函数将字符串转换为int?

可以指出问题涵盖两种情况: 1)在整数之前有空格的字符串:" abcde 123" 2)在整数之前使用任何非数字字符串的字符串:" abcde:123"

3 个答案:

答案 0 :(得分:2)

scanf系列函数可用于执行此操作。所以我先说明并事后解释:

int x;
scanf("%*[^0123456789+-]%d", &x);

第一个格式说明符是[]。它指定scanf应接受的一系列字符。领先的^否定了这一点,因此说明符接受了其他以外的任何。最后,*用于抑制实际输入,因此在扫描输入流的模式时,不会尝试将其分配给任何内容。

答案 1 :(得分:1)

您可以使用isalpha中的isdigitctype.h来查找第一个数字,然后使用atoiatolatollstrolstroll转换为int,例如:

#include <ctype.h>
#include <stdlib.h>

int main(void) {
  char str[] = "abcde123";

  char *p = str;
  while (isalpha(*p)) ++p;
  int i = atoi(p);
}

请注意“如果[atoi / atol / atoll]的转换值超出相应的返回类型范围,则返回值未定义。” (source)。

答案 2 :(得分:0)

您可以使用sscanf(),也可以使用strtoll()

//char string1[] = "abcde:123";
    char string[] = "ab23cde:123";
    int values[4]; // specify the number of integers expected to be extracted
    int i = 0;
    char *pend = string;
    while (*pend) {
        if (isnumber(*pend)) {
            values[i++] = (int) strtoll(pend, &pend, 10);
        } else {
            pend++;
        }
    }

//you can use a forloop to go through the values if more integers are expected

        printf("%d \n",values[0]);
        printf("%d \n",values[1]);
  

23
  123

基本上,字符串中整数的位置无关紧要,它将提取所有整数。