2014-12-01 6 views
0

내 C++ 머드 게임에서 나는 저주 단어를 입력 할 수 없도록 플레이어를 제거하고 싶습니다. 당신은 모두 자신들이 무엇인지 알고 있으며, 예를들 필요가 없습니다. 그래서 나는이 같은 시도 :머드에서 나쁜 단어 필터링하기

vector<string> vulger = { "You know what goes in here"); 

void Player::SendString(const std::string& p_string) 
    { 
for (vector<string>::iterator it = vulger.begin(); it != vulger.end(); ++it) 
    { 
     if (!p_string.compare(*it) || !p_string.find(*it)) 
     { 
      //Testing what words are been neglected by the if statement. 
      //cout << *it; 
       Conn()->Protocol().SendString(*Conn(), p_string + newline); 
     } 
    } 

    } 

을하지만이 모든 수행은 네트워크에 전달되는 문자열을 통해 루프입니다. Announcments 포함.

누구든지 내가 잘못하고있는 것을 보거나 다른 것을 제안 할 수 있습니까?

+3

매개 변수의 이름은'p_string'이지만 루프 내에서'! p_name'을 사용하고 있습니다. 'p_name'이란 무엇입니까? –

+0

죄송합니다. 오타입니다. 지금 바로 수정하겠습니다. –

+0

여기에 코드를 다시 입력하지 마십시오. 실제 코드가 아닌 경우 코드에서 문제를 발견하는 것은 불가능합니다. 재 입력은 문제를 숨길 수 있습니다 (또는 여기에서 일어난 것처럼 새로운 문제를 소개 할 수 있음). 대신 복사하여 붙여 넣기하십시오. –

답변

0

변경하여 if 문에서 ||&&에 :

void Player::SendString(const std::string& p_string) 
    { 
     for (vector<string>::iterator it = vulger.begin(); it != vulger.end(); ++it) 
     { 
#if 0 
// Original: 
     if (!p_name.compare(*it) && !p_name.find(*it)) 
     { 
      Conn()->Protocol().SendString(*Conn(), p_string + newline); 
     } 
     else 
     { 
      cout << "Vulgar word found: " << *it << "\n"; 
     } 
#else 
// Edit 1: Changed ordering. 
     if ((p_name == *it) || (p_name.find(*it) != std::string::npos)) 
     { 
      cout << "Vulgar word found: " << *it << "\n"; 
     } 
     else 
     { 
      Conn()->Protocol().SendString(*Conn(), p_string + newline); 
     } 
#endif 

     } 
    } 
+0

테스트에서이 ive는 입력 될 때 전체 목록이 단지 외설적 인 단어가 아닌 인쇄되는 것을 발견했습니다. –

+0

변경 사항보기, "편집 1". 나는 단어가 저속하다면 인쇄를 논리로 단순화했습니다. 그렇지 않으면 단어를 보내십시오 *. –

+0

업데이트 된 버전을 사용하면 네트워크에 전송 된 모든 내용이 벡터의 내용만큼 반복됩니다. –

0

당신은 부울, 실제로, 그것은 반환 할 때 특별한 마법 값으로 문자열에의 오프셋 (offset)로 std::string::find의 반환 값을 처리하는 npos이 있으면 찾을 수 없습니다.

if (my_string.find("foo") == std::npos) { 
    // foo is NOT in my_string 
} else { 
    // foo is in my_string 
}