npos是一个常数,用来表示不存在的位置,string::npos代表字符串到头了结束了。
 
int idx = str.find("abc");
if (idx == string::npos)
  ...
 
上述代码中,idx的类型被定义为int,这是错误的,即使定义为 unsigned int 也是错的,它必须定义为 string::size_type。
 
npos 是这样定义的:
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) { ... }
 
(EOF)

最新文章

  1. ASP.NET Core的配置(4):多样性的配置来源[中篇]
  2. 001课-java_web开发入门
  3. PAT 10-1 在字符串中查找指定字符
  4. Codeforces Round #335 (Div. 2) D. Lazy Student 贪心
  5. JAX-RS入门 二 :运行
  6. js传真实地址 C:\fakepath
  7. jQuery Easing 动画效果扩展
  8. Tomcat 配置成https协议
  9. jquery判断对象的type
  10. 学习总结------Servlet控制器的简单运用
  11. http连接基础类,负责底层的http通信
  12. js_2_逻辑分支
  13. MySQL:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
  14. iptables snat 和dnat说明
  15. python基础(2)-运算符&while循环
  16. 更改linux下文件目录权限、拥有者及用户组
  17. Parquet
  18. springMVC去掉静态资源的拦截
  19. Sizzle源码分析 (一)
  20. LBS(基于位置服务)

热门文章

  1. Siki_Unity_3-13_编程内功修炼-算法
  2. sparkML原始数据转换成label-features方法
  3. HTMLTestRunner带饼图
  4. 使用 letter-space 后文字不能居中解决
  5. C语言实训——扑克牌洗牌程序
  6. 算法与数据结构5.2 Bubble Sort
  7. 【IdentityServer4文档】- 整体情况
  8. 用逗号隔开简单数据保存为csv
  9. C# 创建Excel或需不安装Office
  10. 【Linux】- Ubuntu安装nginx