问题:我在传递字符串时遇到问题并找到该字符串中的单词。
我试过下面的代码:
if(string.find("Z03"))
{
// field exists
return true;
}
字符串:Z030000000057
这是我正在尝试做的事情:
if(string.find("Z03"))
{
// field exists
return true;
}
当我在“; Z030000000057”这样的消息中传递字符串时,它进入循环但是当我简单地传递“Z030000000057”时,它进入循环。
请帮助我。
答案 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进一步检查标准函数,它非常有用。