我有一個詞是C++如何獲得字符串/字符的話
AD#安道爾
有幾個問題2之間:
如何檢查AD 安道爾存在
?是通配符,它可以是逗號或十六進制或美元符號或其他值
然後確認AD?安道爾存在後,我如何獲得值?
感謝, 陳
我有一個詞是C++如何獲得字符串/字符的話
AD#安道爾
有幾個問題2之間:
如何檢查AD 安道爾存在
?是通配符,它可以是逗號或十六進制或美元符號或其他值
然後確認AD?安道爾存在後,我如何獲得值?
感謝, 陳
問題可以通常與正則表達式匹配來解決。但是,對於您提出的具體問題,這會工作:
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;
}
假設你的角色總是開始於第3位! 使用字符串功能substr
:
your_string.substr(your_string,2,1)
我不會使用'substr'來檢查一個字符串中的一個(固定)位置。 – 2012-08-06 11:06:43
如果您正在使用C++ 11,我建議你在你的字符串中使用正則表達式而不是直接搜索。
如果你在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;
}
調試的噩夢!請,請不要使用單行如果&返回。 – gwiazdorrr 2012-08-06 15:56:05
@gwiazdorrr:當然,問候 – jxh 2012-08-06 15:57:31