读书人

请教这个string的判断表达是什么?

发布时间: 2013-07-01 12:33:04 作者: rapoo

请问,这个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++;
}

这样写也可以吧?
[解决办法]
basic_string::find返回找到的子串位置,如果未找到,则返回npos。

因此,用它的返回值与npos比较,决断是否找到子串。

后一种写法不行,因为basic_string::find()的返回值一般为无符号型,>=0永远为真。

而与npos比较则不一样,npos将被转换为无符号数再参与比较。

话说这个函数的设计很不合理,因为它让返回值同时表达“成功与否”和“子串位置”两个信息。更好的方案应该是:


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

[解决办法]
size_type find( const char *str, size_type index );函数返回的是str在字符串中第一次出现的位置。

读书人网 >C++

热点推荐