如果我想一个字符串比较另一个字符串,就是那里,为什么我应该或不应该使用将字符串与另一个字符串进行比较的最佳方法是什么?
word1 ==word2;
与
strcmp(word1,word2);
什么特别的原因?
编辑1:我在我的问题犯了一个错误,忘记用“==”,而不是“=”
如果我想一个字符串比较另一个字符串,就是那里,为什么我应该或不应该使用将字符串与另一个字符串进行比较的最佳方法是什么?
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
strcmp不仅仅是简单地检查两个字符串是否相等。从cplusplus.com参考我得到它
返回指示 串之间的关系的积分值:一个零值表示两个字符串相等。大于零的值 表示不匹配 的第一个字符在str1中的值比在str2中的值大;而小于 的值表示相反。
这就是为什么它应该是更有效地使用if (str1==str2)
如果'str1'和'str2'是'char *',那么使用'str1 == str2'比较它们不会产生与'strcmp'相同的效果。如果你使用'==',你只是比较这些指针中包含的地址。 – MondKin
惯用方式在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
是一个)。
std::string
是在C++中做字符串的OOP方式。像c字符串中的“字符串”实际上是一个字符数组。使用==
并不会像你想象的那样工作,因为它会比较第一个字符的地址(而不是字符串的内容)。欲了解更多信息,查找指针。在这里你使用strcmp
。
如果您正在使用std::string
(特征为#include <string>
和申报string myvar;
代替char* myvar
)使用==
。
这是C++,你应该使用'word1.compare(word2)'vs'strcmp'。和运算符比较是'==' – smac89
C++? strcmp不是C++。 – dandan78
@ dandan78它可以在C++中使用。 – rspencer