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

时间:2013-12-17 15:34:17

标签: c++

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

word1 ==word2;

strcmp(word1,word2);

编辑1:我在我的问题中犯了一个错误,忘记使用'=='代替'='

5 个答案:

答案 0 :(得分:5)

word1 =word2;

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

bool eq = word1 == word2;

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

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

答案 1 :(得分:3)

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

word1 == word2

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

strcmp(word1, word2)

答案 2 :(得分:1)

strcmp不仅仅是检查两个字符串是否相等。从cplusplus.com参考我得到了它

  

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

这就是为什么使用if (str1==str2)

会更有效率

答案 3 :(得分:1)

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是一个)。

答案 4 :(得分:1)

std::string是在c ++中执行字符串的OOP方式。 c字符串中的“字符串”实际上是一个字符数组。使用==使用它将无法正常工作,因为它将比较第一个字符的地址(而不是字符串的内容)。有关更多信息,请查找指针。在这里使用strcmp

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