将一个字符串与另一个字符串进行比较的最佳方法是什么

What is the best way to compare a string to another string?

本文关键字:字符串 比较 最佳 是什么 方法 一个 另一个      更新时间:2023-10-16

如果我想将一个字符串与另一个字符串进行比较,是否有任何特定的原因说明我应该或不应该使用

word1 ==word2;

strcmp(word1,word2);

第1版:我在问题中犯了一个错误,忘记使用"=="而不是"="

word1 =word2;

你不应该使用这个,因为它是一个赋值,而不是一个比较。比较相等的两个std::strings的惯用方法是

bool eq = word1 == word2;

如果您想知道其中一个字符串是否小于另一个,请使用std::string::compare方法:

int cmp = word1.compare(word2); // beware: 0 means equality

如果您将变量声明为std::string,则必须使用:

word1 == word2

但是,如果您将它们声明为char*,则必须使用:

strcmp(word1, word2)

strcmp不仅仅是简单地检查两个字符串是否相等。从cplusplus.com的参考资料中,我得到了

返回一个整数值,指示字符串:零值表示两个字符串相等。A值大于零表示第一个没有match在str1中的值大于在str2中的值;并且值小于零表示相反。

这就是为什么使用if (str1==str2) 应该更高效

C++中使用和处理字符串的惯用方法是使用标准的std::string字符串。

为了方便起见,此类具有比较运算符:

#include <string>
int main () {
    std::string foo = "foo", bar = "bar";
    if (foo == bar) {
        ....
    }
}

如果你转而使用char*,那么以下内容是错误的:

const char *foo = "foo", *bar = "bar";
if (foo == bar) {
}

这只是比较foo-和bar-字符串的地址,因为变量实际上是指针。作为一个初学者,指针和原始字符串处理都相当困难,所以最好从标准容器开始(如果哪个std::string是一个)。

std::string是在c++中处理字符串的更OOP的方法。c字符串中的"字符串"实际上是一个字符数组。将==与之一起使用不会像您想象的那样起作用,因为它会比较第一个字符的地址(而不是字符串的内容)。有关更多信息,请查找指针。这里使用strcmp

如果使用std::string(以#include <string>为特征,声明string myvar;而不是char* myvar),请使用==