2013-12-17 52 views
0

如果我想一个字符串比较另一个字符串,就是那里,为什么我应该或不应该使用将字符串与另一个字符串进行比较的最佳方法是什么?

word1 ==word2; 

strcmp(word1,word2); 

什么特别的原因?

编辑1:我在我的问题犯了一个错误,忘记用“==”,而不是“=”

+0

这是C++,你应该使用'word1.compare(word2)'vs'strcmp'。和运算符比较是'==' – smac89

+1

C++? strcmp不是C++。 – dandan78

+0

@ dandan78它可以在C++中使用。 – rspencer

回答

5
word1 =word2; 

,因为它是一个任务,而不是比较你不应该使用这个。惯用的方法来比较两个std::strings平等

bool eq = word1 == word2; 

如果你想知道,如果其中一个字符串是低于其他,然后使用std::string::compare方法:

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

如果你声明你的变量为std::string你必须使用:

word1 == word2 

但是,如果你宣布他们是s char*您必须使用:

strcmp(word1, word2) 
+0

什么是字符串?你的意思是'std :: string'? – Shoe

+0

什么是std :: string和string之间的区别? – Gabson

+0

@Gabson'std'是声明类'string'的命名空间。如果你在你的CPP源文件中放入'using namespace std;',那么没有必要在每次使用中明确指出它。 – MondKin

1

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

返回指示 串之间的关系的积分值:一个零值表示两个字符串相等。大于零的值 表示不匹配 的第一个字符在str1中的值比在str2中的值大;而小于 的值表示相反。

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

+0

如果'str1'和'str2'是'char *',那么使用'str1 == str2'比较它们不会产生与'strcmp'相同的效果。如果你使用'==',你只是比较这些指针中包含的地址。 – MondKin

1

惯用方式在C++中使用和处理字符串是使用标准std::string之一。

这个类有比较操作为您提供方便:

#include <string> 

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

如果你不是去使用char*的粗糙和errorful路,再下面是错误的:

const char *foo = "foo", *bar = "bar"; 

if (foo == bar) { 
} 

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

1

std::string是在C++中做字符串的OOP方式。像c字符串中的“字符串”实际上是一个字符数组。使用==并不会像你想象的那样工作,因为它会比较第一个字符的地址(而不是字符串的内容)。欲了解更多信息,查找指针。在这里你使用strcmp

如果您正在使用std::string(特征为#include <string>和申报string myvar;代替char* myvar)使用==

相关问题