-4
const char* mystring;

上記の変数では、「ABCD1234」または「abcb1234」として値を受け取ります。文字列を解析して、値 1234 (文字の後) を取得する必要があります。C++でこれを効率的に行うには?

私は常に数字の前に4つの単語を持っています.

ブーストを使用することは想定されていません。

4

3 に答える 3

1

エラーチェックなし:

const char *c = mystring;
while (*c && ('0' > *c || *c > '9')) ++c;
return atoi(c);

構文チェックが必要な場合は、atoi の代わりに strtol を使用してください。

于 2012-07-13T10:42:54.433 に答える
1

あなたの弦の正確なパターンは何ですか?

あなたがやろうと思うかもしれないことの1つは、find_first_not_of()例えばstringメソッドを使うことです.

string newStr = oldStr.substr( oldStr.find_first_not_of( "ABCDabcd" ) );

一方、最初の 4 文字の後に続くものが必要であることがわかっている場合、それは本当に面倒です。

string newStr = oldStr.substr( 4 );
于 2012-07-13T10:43:10.610 に答える
1

次のいずれかを使用して、数字シーケンスの先頭を見つけることができます。どちらの関数も検索する複数の文字を受け入れるためです。

  • strpbrk()を検索するにはchar*:

    char* first_digit = strpbrk(mystring, "0123456789");
    if (first_digit)
    {
        /* 'first_digit' now points to the first digit.
           Can be passed to atoi() or just used as a
           substring of 'mystring'. */
    }
    
  • std::string::find_first_of():

    size_t first_digit_idx = mystring.find_first_of("0123456789");
    if (std::string::npos != first_digit_idx)
    {
        // Use `std::string::substr()` to extract the digits.
    }
    
于 2012-07-13T10:43:33.713 に答える