c++如何使用==比较两个字符串
How does c++ compare two string using ==?
我今天遇到了一个非常简单但令人困惑的问题。
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "123";
string a = "1";
string b = "1";
cout << ((str[0]+"") == a) << endl;
cout << (a==str.substr(0,1)) << endl;
cout << (a==b) << endl;
}
输出为:01.1
为什么第一个compare语句为false?当使用==运算符时,c++如何比较两个字符串?
str[0]+""
是一个相当奇怪的东西——您取第一个字符的数值(假设字符'1'
的ASCII编码为49),并将其添加到指向空字符串开头的指针中。这会给您一个无效的指针和未定义的行为。
如果你想用第一个字符制作一个字符串,那就是
string(1, str[0])
string(str, 0, 1)
str.substr(0, 1)
string() + str[0]
其将与CCD_ 3 相比较
它们是不同的类型,表达式str[0]+""
的结果是char *
类型(""
是char *
而不是string
,对于char *
,运算符+
没有重载,因此其行为是未定义的),但a
是string
类型,显然它们不相等。要查看原因,您可以运行以下代码:
cout<<typeid(str[0]+"").name()<<endl;
cout<<typeid(a).name()<<endl;
相关文章:
- 两个字符串在 c++ 中不相等
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 比较两个字符串后卡在无限循环中
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 两个字符串之间的数学运算
- sscanf() 有两个字符串参数
- 我的字符串数组一次打印出前两个字符串
- 两个 c++ 字符串上的异或
- 函数返回两个字符串的第一个常用字符
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)
- 我需要在C++的两个字符串之间找到共同的前缀
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 给定两个字符串 S 和 T.确定与 T 相差最小的 S 子字符串?
- gtest:检查字符串是否等于两个字符串之一
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 我可以在系统()中使用两个字符串吗?