2014-09-22 10 views
-6

Проблема: я получаю проблему во время передачи строки и узнаю слово в этой строке.Как определить конкретное слово в строке

Я попытался ниже код:

if(string.find("Z03")) 
{ 
    // field exists 
    return true; 
} 

Строка: Z030000000057

Вот что я пытаюсь сделать:

if(string.find("Z03")) 
{ 
    // field exists 
    return true; 
} 

, когда я прохожу строку в сообщении, как «; Z030000000057 ", тогда он вводится в цикл, но когда я просто передаю" Z030000000057 ", он переходит в цикл.

Просьба помочь мне в этом.

+3

Прочтите [некоторые документы] (http://en.cppreference.com/w/cpp/string/basic_string/find). – juanchopanza

+1

find не возвращает логическое значение, его возвращает индекс, где была найдена строка. Вы неявно конвертируете int в bool. [см. документацию] (http://en.cppreference.com/w/cpp/string/basic_string/find) – Borgleader

+0

Какой цикл это? –

ответ

2

find() возвращает индекс первого вхождения, или string::npos. Ваш if тестирует, если find() возвратил ноль (то есть первое вхождение в начале строки) или нет (т. Е. Строка поиска происходит позже или вообще отсутствует).

Вы вероятно ищет ...

if (string.find("Z03") != std::string::npos) 
{ 
    // field exists 
    return true; 
} 

... который возможно может быть сокращен до ...

return (string.find("Z03") != std::string::npos); 

... если ни истинным, ни ложная ветвь делает что-то еще.

0

Проверьте документацию по методу «найти»: http://en.cppreference.com/w/cpp/string/basic_string/find

Метод возвращает позицию первого символа найденной подстроки или станд :: строка :: НСС, если подстрока не найдена.

Что касается ваших примеров:

std::string s("Z030000000057"); 
if(s.find("Z03")) 
{ 
    // execution DOES NOT goes here because find returns 0 as found position 
} 

s = ";Z030000000057"; 
if(s.find("Z03")) 
{ 
    // execution goes here because find returns 1 as found position 
} 

Правильный код будет выглядеть так:

if (s.find("Z03") != std::string::npos) 
{ 
    // field exists 
} 

Я рекомендую использовать cppreference для дальнейшей проверки стандартных функций, это очень полезно.