如果我想将字符串与另一个字符串进行比较,是否有任何特殊原因导致我应该或不应该使用
word1 ==word2;
与
strcmp(word1,word2);
编辑1:我在我的问题中犯了一个错误,忘记使用'=='代替'='
答案 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
),请使用==
。