关于stl string find 容易犯的一个错误

简介: 有时候经常会判断一个字符串a中是否有子字符串b,那么有人会调用 string::find这个函数  这个函数返回子字符串首次出现的位置,那么有人会这样写   string str1 = ""; if(str1.find("aaaa") >= 0) cout

有时候经常会判断一个字符串a中是否有子字符串b,那么有人会调用 string::find这个函数  这个函数返回子字符串首次出现的位置,那么有人会这样写

 

    string str1 = "";
    if(str1.find("aaaa") >= 0)
        cout<<""<<endl;
    else
        cout<<"没有"<<endl;

    system("pause");
    return 0;

结果输出是错误的。而实际上必须写成这样

    string str1 = "";
    if(str1.find("aaaa") != string::npos)
        cout<<""<<endl;
    else
        cout<<"没有"<<endl;

经过调试发现 find的返回值是无符号整型,也就是说没有负数。>= 0 在任何时刻都成立的。

相关文章
|
C++
【C++】STL | 模拟实现简易string
【C++】STL | 模拟实现简易string
31 0
|
5月前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
6月前
|
算法 Linux C语言
【C++进阶(一)】STL大法以及string的使用
【C++进阶(一)】STL大法以及string的使用
|
存储 编译器 C++
【C++】STL之String模拟实现
【C++】STL之String模拟实现
|
存储 缓存 安全
第十章、String字符串
在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面向对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。在开发和校招笔试中,字符串也是常客。面试中也频繁被问到,比如:String、StringBuff和StringBulider之间的区别等。由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。
51 0
|
存储 算法 编译器
【C++初阶】九、STL---string/vector/list补充
目录 一、vs和g++下string结构说明 1.1 vs下string的结构 1.2 g++下string的结构 二、vector和list对比 2.1 vector优缺点 2.2 list优缺点 三、迭代器失效问题 四、list模拟实现 -&gt; 操作符重载问题
139 0
【C++初阶】九、STL---string/vector/list补充
|
存储 C++
C++【STL】之string模拟实现
C++ STL string类模拟实现,常用接口详细讲解,干货满满!
54 0
|
存储 缓存 C语言
【C++ STL】string模拟实现
本文将讲述怎么模拟实现string类,有些同学可能会问了,我要实现这个有什么用?会用不就可以了吗?
69 0
|
存储 算法 Linux
C++ STL 学习之【string】
STL 是 C++ 的重要组成部分,由六大部分构成:伪函数、空间配置器、算法、容器、迭代器 和 配接器,其中各种各样的 容器 可以很好的辅助我们写程序,比如今天要介绍的 string,有了它之后,我们对字符串的操作就能变得行云流水
217 0
C++ STL 学习之【string】
【C++】-- STL之String模拟实现(一)
【C++】-- STL之String模拟实现
113 0
【C++】-- STL之String模拟实现(一)