1

という言葉をもらいました

AD#アンドラ

いくつか質問があります:

アンドラが存在することを確認するにはどうすればよいですか?

? はワイルドカードです。コンマ、16 進数、ドル記号、またはその他の値を指定できます

アンドラが存在することを確認した後、どのように値を取得しますか?

ありがとう、チェン

4

4 に答える 4

4

この問題は通常、正規表現の一致で解決できます。ただし、提示した特定の問題については、これでうまくいきます。

std::string input = getinput();
char at2 = input[2];
input[2] = '#';
if (input == "AD#Andorra") {
    // match, and char of interest is in at2;
} else {
    // doesn't match
}

も文字列を表すと想定されている場合は?、次のようなことができます。

bool find_inbetween (std::string input,
                     std::string &output,
                     const std::string front = "AD",
                     const std::string back = "Andorra") {
    if ((input.size() < front.size() + back.size())
        || (input.compare(0, front.size(), front) != 0)
        || (input.compare(input.size()-back.size(), back.size(), back) != 0)) {
        return false;
    }
    output = input.substr(front.size(), input.size()-front.size()-back.size());
    return true;
}
于 2012-08-06T10:59:33.353 に答える
2

C++11/Boost を使用している場合 (これを強くお勧めします!)、正規表現を使用します。ある程度の理解を得ると、すべてのテキスト処理が簡単になります。

#include <regex> // or #include <boost/regex>

//! \return A separating character or 0, if str does not match the pattern
char getSeparator(const char* str)
{
    using namespace std; // change to "boost" if not on C++11
    static const regex re("^AD(.)Andorra$");
    cmatch match;
    if (regex_match(str, match, re))
    {
        return *(match[1].first);
    }
    return 0;
}
于 2012-08-06T11:14:47.583 に答える
0

C++11 を使用している場合は、文字列を直接検索する代わりに正規表現を使用することをお勧めします。

于 2012-08-06T11:00:21.610 に答える
0

あなたのキャラクターが常に3位から始まると仮定してください! 文字列関数を使用しますsubstr:

your_string.substr(your_string,2,1)
于 2012-08-06T10:57:11.470 に答える