我的问题非常简单。如果在实际整数之前有任意数量的冗余字符,C中是否有函数将字符串转换为int?
可以指出问题涵盖两种情况: 1)在整数之前有空格的字符串:" abcde 123" 2)在整数之前使用任何非数字字符串的字符串:" abcde:123"
答案 0 :(得分:2)
scanf
系列函数可用于执行此操作。所以我先说明并事后解释:
int x;
scanf("%*[^0123456789+-]%d", &x);
第一个格式说明符是[]
。它指定scanf
应接受的一系列字符。领先的^
否定了这一点,因此说明符接受了其他以外的任何。最后,*
用于抑制实际输入,因此在扫描输入流的模式时,不会尝试将其分配给任何内容。
答案 1 :(得分:1)
您可以使用isalpha
中的isdigit
或ctype.h
来查找第一个数字,然后使用atoi
或atol
或atoll
或strol
或stroll
转换为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
基本上,字符串中整数的位置无关紧要,它将提取所有整数。