我得到的是
AD#安道尔
有几个问题:
我如何检查 AD?安道尔存在
?是通配符,可以是逗号或十六进制或美元符号或其他值
然后在确认AD?Andorra存在之后,我如何得到值?
谢谢, 陈
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
假设你的角色总是从位置3开始!
使用字符串函数substr
:
your_string.substr(your_string,2,1)
答案 3 :(得分:0)
如果您使用的是C ++ 11,我建议您使用正则表达式而不是直接搜索字符串。