1

我有一个词是

AD#安道尔

有几个问题:

我如何检查 AD?安道尔存在

? 是通配符,它​​可以是逗号或十六进制或美元符号或其他值

那么在确认 AD?Andorra 存在后,我如何获得 的值?

谢谢,陈

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

假设你的角色总是从位置 3 开始!使用字符串函数substr

your_string.substr(your_string,2,1)
于 2012-08-06T10:57:11.470 回答
0

如果您使用的是 C++11,我建议您使用正则表达式而不是直接在字符串中搜索。

于 2012-08-06T11:00:21.610 回答