string类find函数返回值判定
来源:互联网 发布:arm linux开机动画 编辑:程序博客网 时间:2024/05/21 13:55
代码示例
- int main()
- {
- string s = "Alice Bob Charlie";
- size_t position;
- position = s.find("none");
- if (position >= 0)
- cout << "Found! position is : " << position << endl;
- else
- cout << "Not found!" << endl;
- }
现象&后果
程序运行结果输出"Found! position is : 4294967295",但实际上所找的字符串"none"并不存在于字符串s中。
Bug分析
程序的目的是,在源字符串s中查找目的字符串,若找到,则显示"Found",并返回目标子串在源字符串中的位置;反之,若未找到,则返回"Not found"。string.find在未找到时会返回string::npos。
在C++中常量npos是这样定义的:
- static const size_t npos = -1;
即常量npos定义的值为-1. 但又因为npos 的类型size_t是无符号整数类型,所以npos实际上是一个正数,并且是size_t类型的最大值。
上述代码中,把find函数返回的值赋给size_t类型的变量position,而size_t类型的变量position是永远大于等于0,所以即使find返回npos,if条件也为true。
正确的做法是在if条件中直接用npos作比较。
正确代码
- int main()
- {
- string s = "Alice Bob Charlie";
- size_t position;
- position = s.find("none");
- if (position != string::npos)
- cout << "Found! position is : " << position << endl;
- else
- cout << "Not found!" << endl;
- }
0 0
- string类find函数返回值判定
- string类find函数返回值判定
- string类find函数返回值判定
- string的find函数返回值和string::npos 的理解
- 关于string::find的返回值
- 为什么 string.find()返回值是-1
- C++ string.find()返回值问题
- string类中的find函数
- string类各种find函数
- std::string的find返回值为string::size_type
- C++函数返回指针或引用实例,string.find()与string::npos实例
- string类的查找函数 find()
- 关于string类的find()一系列函数
- string类的find()函数总结
- string find查找函数
- string.find()函数用法
- std::string find函数
- string find函数
- android滑动按钮
- .net获取项目根目录方法大全
- 关于状态机 finite-state machine
- 乐视(letv)网tkey破解
- JMeter基础--测试计划元件
- string类find函数返回值判定
- 驱动开发之 加载NT式驱动
- 1005. 继续(3n+1)猜想 (25)
- [Android] AsyncTask使用实例---加载网络图片
- bzoj2662: [BeiJing wc2012]冻结 分层图最短路
- 让人死去活来的cocos2d-x安卓开发环境搭建(windows+eclipse+ndk)
- MSP430F5529 (六)定时器Timer_A
- 日期比较
- 数据结构-------列表二