std::string::find() 和 std::string::npos
2024-08-31 02:02:03
npos是一个常数,用来表示不存在的位置,string::npos代表字符串到头了结束了。
int idx = str.find("abc");
if (idx == string::npos)
...
if (idx == string::npos)
...
上述代码中,idx的类型被定义为int,这是错误的,即使定义为 unsigned int 也是错的,它必须定义为 string::size_type。
npos 是这样定义的:
static const size_type npos = -1;
static const size_type npos = -1;
因为 string::size_type (由字符串配置器 allocator 定义) 描述的是 size,故需为无符号整数型别。因为缺省配置器以型别 size_t 作为 size_type,于是 -1 被转换为无符号整数型别,npos 也就成了该型别的最大无符号值。不过实际数值还是取决于型别 size_type 的实际定义。不幸的是这些最大值都不相同。事实上,(unsigned long)-1 和 (unsigned short)-1 不同(前提是两者型别大小不同)。因此,比较式 idx == string::npos 中,如果 idx 的值为-1,由于 idx 和字符串string::npos 型别不同,比较结果可能得到 false。
要想判断 find() 的结果是否为npos,最好的办法是直接比较:
if (str.find("abc") == string::npos) { ... }
if (str.find("abc") == string::npos) { ... }
(EOF)
最新文章
- ASP.NET Core的配置(4):多样性的配置来源[中篇]
- 001课-java_web开发入门
- PAT 10-1 在字符串中查找指定字符
- Codeforces Round #335 (Div. 2) D. Lazy Student 贪心
- JAX-RS入门 二 :运行
- js传真实地址 C:\fakepath
- jQuery Easing 动画效果扩展
- Tomcat 配置成https协议
- jquery判断对象的type
- 学习总结------Servlet控制器的简单运用
- http连接基础类,负责底层的http通信
- js_2_逻辑分支
- MySQL:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- iptables snat 和dnat说明
- python基础(2)-运算符&;while循环
- 更改linux下文件目录权限、拥有者及用户组
- Parquet
- springMVC去掉静态资源的拦截
- Sizzle源码分析 (一)
- LBS(基于位置服务)