关于网友提出的“ 请问,这个string的判断表达是什么? 我这么写也是可以的吧?”问题疑问,本网通过在网上对“ 请问,这个string的判断表达是什么? 我这么写也是可以的吧?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 请问,这个string的判断表达是什么? 我这么写也是可以的吧?描述:
string tempStr = "this is bok.";
//判断1
if (tempStr.find("bok.") != string::npos)
{
count++;
}
理论上判断1返回true,
但是我理解不了
!= string::npos
不等于 string::npos
我查过npos这个东西,其实就是-1,是否可以这么写呢?(主要是我不理解find的函数方法)
if (tempStr.find("bok.") >= 0) //返回0其实就是存在于字符串第一位?
{
count++;
}
这样写也可以吧?
解决方案1:
size_type find( const char *str, size_type index );函数返回的是str在字符串中第一次出现的位置。
解决方案2: basic_string::find返回找到的子串位置,如果未找到,则返回npos。
因此,用它的返回值与npos比较,决断是否找到子串。
后一种写法不行,因为basic_string::find()的返回值一般为无符号型,>=0永远为真。
而与npos比较则不一样,npos将被转换为无符号数再参与比较。
话说这个函数的设计很不合理,因为它让返回值同时表达“成功与否”和“子串位置”两个信息。更好的方案应该是:
pairfind(...);
//示意性代码
//find(...).first表明是否成功
//find(...).second返回子串位置