请问,这个string的判断表达是什么? 我这么写也是可以的吧?

来源:互联网  时间:2016/9/1 20:15:57

关于网友提出的“ 请问,这个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将被转换为无符号数再参与比较。
话说这个函数的设计很不合理,因为它让返回值同时表达“成功与否”和“子串位置”两个信息。更好的方案应该是:


pair find(...);
//示意性代码
//find(...).first表明是否成功
//find(...).second返回子串位置

上一篇const 有什么用啊??
下一篇求大神指导C++课设 特殊的计算器
明星图片
相关文章
《 请问,这个string的判断表达是什么? 我这么写也是可以的吧?》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)