将一个字符串与另一个字符串进行比较的最佳方法是什么
What is the best way to compare a string to another string?
如果我想将一个字符串与另一个字符串进行比较,是否有任何特定的原因说明我应该或不应该使用
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
),请使用==
。
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 字符串比较中的意外输出
- 如何执行不区分大小写的字符串比较?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- <<运算符优先级与字符串比较
- ">"运算符和"<"运算符如何进行字符串比较?
- Qt C++11 字符串通过子字符串比较列出交集
- std::out_of_range字符串比较中的异常
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 字符* 与uint8_t的字符串比较
- 用字符串 c++ 比较对向量的元素
- 使用循环进行词典字符串比较
- 如何为C++映射创建自己的字符串比较对象
- 不带比较()的字符串比较
- 与 IF 语句C++的字符串比较?
- 字符串比较在与变量一起使用时给出不同的输出
- 更快的字符串比较排序,用于唯一()
- C 字符串比较“祝您好运”&gt;“再见”
- C 奇怪的行为和字符串比较
- 子字符串与 std::memcmp 或字符串::比较的比较