c++ - 为什么包含 '\0' 和 '\t' 的字符串不能使用 operator == 与 "\0\t"进行比较?

标签 c++ string

string s;
s += '\0';
s += '\t';
if (s == "\0\t")
    cout << "Yahoo";

我听不到“雅虎”。

这是否意味着如果我想检查这样的字符串,我必须这样编码?

if (s[0] == '\0' && s[1] == '\t')
    cout << "Yahoo";

最佳答案

您正在使用将 std::stringconst char* 进行比较的运算符。在该函数中,假定 const char* 指向一个以 null 结尾(即 '\0')的 c 字符串。由于 '\t' 出现在终止符之后,因此该函数不会将其视为字符串的一部分,实际上,甚至无法确定它是否存在.

你可以这样做:

if (s == std::string("\0\t",2))

这将构造一个带有完整字符串文字的 std::string(减去编译器添加的终止 '\0'),并将您的字符串与那个。

关于c++ - 为什么包含 '\0' 和 '\t' 的字符串不能使用 operator == 与 "\0\t"进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24902353/

相关文章:

c++ - 将两个字符的字符串变量转换为十六进制

javascript - 如果 JavaScript 中的特定单词匹配,则替换行

c++ - GCC:减少输出中的模板名称

c++ - 是否可以在 char 中返回 "weird"个字符?

c++ - C++ 中 'Using' 关键字应用于派生类的缺点

string - 如何检查文本是否包含Golang列表中的任何单词?

string - Kotlin - 是否有一个基本函数可以用引用字符串中的多个字符串替换多个字符串?

c++ - 如果有多个字符,如何使用 isdigit() 进行检查

C++ 模板和 Unsigned long 问题

javascript - 在 JavaScript 中拆分字符串并检测换行符