如何找出字符串中的特定单词

时间:2014-09-22 11:57:34

标签: c++

问题:我在传递字符串时遇到问题并找到该字符串中的单词。

我试过下面的代码:

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

字符串:Z030000000057

这是我正在尝试做的事情:

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

当我在“; Z030000000057”这样的消息中传递字符串时,它进入循环但是当我简单地传递“Z030000000057”时,它进入循环。

请帮助我。

2 个答案:

答案 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 );

...如果真假分支都没有做其他事情。

答案 1 :(得分:0)

查看'发现'的文档。方法:http://en.cppreference.com/w/cpp/string/basic_string/find

如果找不到子字符串,该方法将返回找到的子字符串或std :: string :: npos的第一个字符的位置。

关于您的示例:

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进一步检查标准函数,它非常有用。