从字符串中提取以下整数的最简单方法是:“54 232 65 12”。
如果最后一个数字是long long int怎么办?是否可以在没有sstream的情况下执行此操作
答案 0 :(得分:5)
试试这个:
#include <cstdlib>
#include <cstdio>
#include <cerrno>
#include <cstring>
int main()
{
char str[] = " 2 365 2344 1234444444444444444444567 43";
for (char * e = str; *e != '\0'; )
{
errno = 0;
char const * s = e;
unsigned long int n = strtoul(s, &e, 0);
if (errno) // conversion error (e.g. overflow)
{
std::printf("Error (%s) encountered converting:%.*s.\n",
std::strerror(errno), e - s, s);
continue;
}
if (e == s) { ++e; continue; } // skip inconvertible chars
s = e;
printf("We read: %lu\n", n);
}
}
在C ++ 11中,您还可以使用std::strtoull
,它会返回unsigned long long int
。
(Live example。)