加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c中的find_first_of给出不同的值

发布时间:2020-12-16 10:12:27 所属栏目:百科 来源:网络整理
导读:在下面的代码中,我不明白为什么b是假的. string s = "--p--";cout s.find_first_of("p") endl; //prints 2bool b = s.find_first_of("p")-1;cout b endl; //prints 0 (why?) 解决方法 s.find_first_of(“p”)返回size_t,这是一个无符号类型. operator在s.fin
在下面的代码中,我不明白为什么b是假的.

string s = "--p--";
cout << s.find_first_of("p") << endl; //prints 2
bool b = s.find_first_of("p")>-1;
cout << b << endl;  //prints 0 (why?)

解决方法

s.find_first_of(“p”)返回size_t,这是一个无符号类型.

> operator在s.find_first_of(“p”)> -1之前将-1转换为无符号类型;被评估.这就是C的工作方式:如果带有两个参数的运算符遇到有符号和无符号类型作为那些参数,那么带符号的运算符将转换为无符号类型.

转换为无符号类型时,-1将是一个大的正数. (实际上,它会回绕到size_t的最大值.)

所以你的比较评估为假.

要检查字符是否不在字符串中,请使用b = s.find_first_of(“p”)!= string :: npos;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读