首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否可以在C++中使用!=和==进行字符串比较,而无需自己编写?

我是否可以在C++中使用!=和==进行字符串比较,而无需自己编写?
EN

Stack Overflow用户
提问于 2013-10-08 03:19:33
回答 3查看 9.4K关注 0票数 1

换言之,C和C++在字符串比较上有什么不同?

我来自“C”阵营。我看到一个程序使用==来比较字符串,我试图找到它的重载程序,但没有找到一个。这是否意味着C++会自然地使用==和!=处理字符串(char [])?

如果我有自己定义的字符串类,那么我可以使用==和!=而不定义它们吗?或者它只适用于char []?

编辑:

看起来我把C的char[]和C++ std::string类混在一起了。好了,这个老问题仍然适用。以下是一些问题:

我的程序定义了char[]变量,但与"==“运算符相比。看起来很管用。它们是C风格的字符串,但使用"==“。编译器是否为我自动将它们转换为std::string,这样程序就可以工作了?

Edit2:

这是一个有效的示例。

代码语言:javascript
运行
复制
if(name == "") return;

其中"name“是一个MyString类项目。它有一个带参数char*的构造函数。

MyString有一个公共函数data(),它返回char* C样式的字符串指针。

那么,我是在比较MyString对象吗?或者C风格的字符串?

如果没有重载"!=“我自己,我能做一些类似下面的事情吗?

代码语言:javascript
运行
复制
if( name.data() != somes_[i].data() )
....
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-08 03:24:14

“这是不是意味着用==!=__自然地处理string __?”

No。将C样式的字符串(即char[]char*)与==!= (在C和C++中)进行相互比较是错误的,因为您最终将比较指针而不是字符串。

在C++中,可以将std::string对象与C样式的字符串或其他std::string对象进行比较,因为std::stringoperator==operator!=

代码语言:javascript
运行
复制
std::string str1("abc"), str2("def");
if (str1 != str2 && str1 == "abc")
    std::cout << "Yep, I got it.";
票数 7
EN

Stack Overflow用户

发布于 2013-10-08 03:23:33

字符是否意味着C++使用==和!=自然地处理字符串(

[])?

不会;"aaa" == "aaa"会像往常一样将字符串转换为char*,并比较指针的值。然而,C和C++的大多数实现都将消除字符串文字数据的重复,至少在目标文件中是这样的,因此这些指针将是相同的。该标准不能保证这一点,但它得到了广泛的实现。

换句话说,在这一点上,C++与C没有什么不同,用这种方法比较char*值并不比用C更好。

有没有帮我把它们自动转换成std::string,这样程序就能工作了?

std::string重载了与char*一起使用的比较运算符。如果您将char*std::string进行比较,则将使用其中之一。

代码语言:javascript
运行
复制
char const *s = "aaa";
std::string t = "aaa";
s == t; // uses overloaded operator== to compare string values.

http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp

代码语言:javascript
运行
复制
template< class CharT, class traits, class Alloc >
bool operator==( const CharT* lhs, const basic_string<CharT,Traits,Alloc>& rhs );
票数 6
EN

Stack Overflow用户

发布于 2013-10-08 03:28:42

不要使用!=或!=比较C样式字符串(char *或char[])。

如果您确定字符串是以null结尾的,请使用std::strcmp()。如果您不能百分之百确定它们是以null结尾的,那么可以使用std::strncmp()来比较它们。

如果其中一个字符串是std::字符串,则可以使用运算符==或运算符!=。

根据来自barnes53的评论进行编辑

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19232814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档