const char* mystring;
上記の変数では、「ABCD1234」または「abcb1234」として値を受け取ります。文字列を解析して、値 1234 (文字の後) を取得する必要があります。C++でこれを効率的に行うには?
私は常に数字の前に4つの単語を持っています.
ブーストを使用することは想定されていません。
エラーチェックなし:
const char *c = mystring;
while (*c && ('0' > *c || *c > '9')) ++c;
return atoi(c);
構文チェックが必要な場合は、atoi の代わりに strtol を使用してください。
あなたの弦の正確なパターンは何ですか?
あなたがやろうと思うかもしれないことの1つは、find_first_not_of()
例えばstringメソッドを使うことです.
string newStr = oldStr.substr( oldStr.find_first_not_of( "ABCDabcd" ) );
一方、最初の 4 文字の後に続くものが必要であることがわかっている場合、それは本当に面倒です。
string newStr = oldStr.substr( 4 );
次のいずれかを使用して、数字シーケンスの先頭を見つけることができます。どちらの関数も検索する複数の文字を受け入れるためです。
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'. */
}
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.
}