2014-11-03 5 views
0

벨로우가 분명합니다. 텍스트에서 원하는 단어를 찾습니다.이 경우 "안녕하세요." 그런 다음 그 프로그램을 실행합니다. 우리가 "안녕하세요"모두에 있기 때문에한 단어가 있으면 C++ 트리거

std::getline(std::cin, text); 
if(text.find("history is a subject") != std::string::npos 
{ 
/////thing2///// 
} 

모두 thing1 및 thing2가 실행 "역사가 될 수 있습니다"를 입력한다면

std::getline(std::cin, text); 
if(text.find("hi") != std::string::npos 
{ 
/////thing1///// 
} 

문제입니다.

thing1을 유발하는 것만을 "hi"로 만드는 요구 사항을 만들 수 있습니까? 정확하게 "hi". 그 밖의 어떤 것도 타이핑되지 않았을 것입니다. 따라서 "history is subject"가 입력 된 경우 thing2 만 실행됩니다. 나는 그것이 의미가 있기를 바랍니다. 고맙습니다.

+0

if (체크 히스토리) else if (체크 하이) else if (..)' –

+1

구분 기호를 확인하지 않는 전형적인 경우. "히야"는 "히코리 (hickory)"처럼 첫 번째 것도 유발합니다. – Deduplicator

+0

유용한 답변을 원할 경우 규칙을 원하는대로 설명해야합니다. 정확히 "hi"와 정확히 매칭하고 싶습니까? 또는 "안녕"이라는 단어가 포함 된 모든 단어를 검색하고 싶습니까? 또는 무엇을? –

답변

-1

저는 C++에 대해 많이 알지 못합니다.하지만 C 언어에서는 hi : "hi"뒤에 공백을 추가 할 수 있습니다. 그것은 "hi"뒤에 공백을 찾습니다. 여기

std::getline(std::cin, text); 
if(test.find("hi ") != std::string::npos) 
{ 
    //thing 1 
} 
+0

"hi"가 마지막 단어 또는 유일한 단어 인 경우 어떻게됩니까? –

+0

또한 "Chi"를 입력으로 사용하면 거짓 경고가 발생합니다. – dgnuff

1

실행이 정확하게 당신이 찾고있는 무엇 http://ideone.com/T4f5g8

#include <iostream> 
#include <regex> 

using namespace std; 

int main() { 

    string text = "hi"; 
    regex rgx(text); 

    if(regex_match("history is a subject", rgx) == true) 
     cout << "false"; // never gona print as rgx=hi 

    if(regex_match("hi", rgx) == true) 
     cout << "Matched"; 

    return 0; 
} 

.

+0

'regex_match'를 사용하면 잔인 함이 있습니다 만, 확실히 작동합니다. 나는 훨씬 단순한 문자열 비교를 선호한다. – Deduplicator