0

C++11 正規表現クラスを使用せずに C++ で文字列形式を検証するより良い方法を知っている人はいますか? 基本的に、TAG1:VALUE、TAG2:VALUE、TAG1:VALUE、TAG2:VALUE という形式の文字列がいくつかあります。

TAG1 と TAG2 は文字列で、VALUE はさまざまな長さの整数値です

文字列の例は、「PPS:112、FJ:543、PPS:76432、FJ:753」などです。

形式が正確であることを確認する関数が必要です。

これまでのところ、文字ごとの検証で行っています。これはせいぜい退屈に思えます。私が単に気づいていないより良い方法はありますか?繰り返しますが、必要がない限り、C++ 11 またはサードパーティのライブラリから正規表現を使用することは避けたいと思います。C ++とSTLだけでこれを行うより良い方法があるかどうか、私は主に疑問に思っていました

4

1 に答える 1

2

サードパーティのライブラリをまったく使用せずに、実際にはそうではありません。標準ライブラリ コンポーネントを使用して行う最善の方法は、次のようなものです。

#include <string>
#include <algorithm>

bool verify(const std::string& s)
{
    typedef std::string::size_type      size_type;
    typedef std::string::const_iterator cstr_it;

    size_type colon_index = s.find(":");

    if (colon_index == std::string::npos)
    {
        return false;
    }

    cstr_it letter_end = s.begin() + colon_index;
    bool valid_letter = std::all_of(s.begin(), letter_end, isupper);
    bool valid_number = std::all_of(letter_end, s.end(), isdigit);

    return valid_letter && valid_number;
}
于 2013-03-16T07:24:32.510 に答える