4

「54 232 65 12」などの文字列から次の整数を抽出する最も簡単な方法は何ですか。

最後の数字が long long int の場合はどうでしょうか。sstreamなしでこれを行うことは可能ですか

4

1 に答える 1

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

(実例)

于 2013-06-07T21:08:45.147 に答える