2012-08-06 48 views
1

我有一個詞是C++如何獲得字符串/字符的話

AD#安道爾

有幾個問題2之間:

如何檢查AD 安道爾存在

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

然後確認AD?安道爾存在後,我如何獲得值?

感謝, 陳

回答

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; 
} 
+0

調試的噩夢!請,請不要使用單行如果&返回。 – gwiazdorrr 2012-08-06 15:56:05

+0

@gwiazdorrr:當然,問候 – jxh 2012-08-06 15:57:31

0

假設你的角色總是開始於第3位! 使用字符串功能substr

your_string.substr(your_string,2,1) 
+0

我不會使用'substr'來檢查一個字符串中的一個(固定)位置。 – 2012-08-06 11:06:43

0

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

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; 
} 
相關問題