我有一个字符串str,如果str由纯数字组成,则将数字提取到int中,如果不是,则不提取任何内容或仅提取0。
例如,
str = "12345"; // composed of pure digits, extract 12345
str = "123abc"; // not pure digits, extract nothing or 0我能用sscanf来做吗?多么?
发布于 2013-07-01 12:13:05
int value;
char unused;
if (1 == sscanf(myString, "%d%c", &value, &unused))
{
// success
}
else
{
// bad input
}发布于 2013-07-01 12:23:53
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int only_int(const char *s, int *v) {
char buf[256];
*v = 0;
if (sscanf(s, "%[0-9]", buf) && strlen(buf) == strlen(s)) {
*v = atoi(buf);
return 0;
}
return -1;
}
int main() {
char str1[] = "12345", str2[] = "123abc";
int i, r;
r = only_int(str1, &i); printf("%d, %d\n", r, i);
r = only_int(str2, &i); printf("%d, %d\n", r, i);
return 0;
}输出:
0, 12345
-1, 0发布于 2013-07-01 14:14:33
有几件事需要考虑:
这将执行大量的验证和范围检查:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
unsigned long parse_num(const char* str)
{
char *endptr = NULL;
long result;
if (strspn(str, "0123456789") != strlen(str)) {
return 0;
}
errno = 0;
result = strtoul(str, &endptr, 10);
if (errno == ERANGE || *endptr) {
return 0;
}
return result;
}
int main(void)
{
printf("%lu\n", parse_num("12345")); // 12345
printf("%lu\n", parse_num("123abc")); // 0
printf("%lu\n", parse_num("-123")); // 0
printf("%lu\n", parse_num("1231111111111111111111111111111123123131")); // 0
printf("%lu\n", parse_num("0123")); // 123
}https://stackoverflow.com/questions/17397303
复制相似问题