字符串 class 中指针和整数的比较 - C++

Comparison between pointer and integer in string class - C++

我是 C++ 新手。

string str = "WWWHBBB";
if(str[mid] == "H" && str[0] != "W") return; // corrected after comments for second operand

上面 if 条件的行给我一个错误。

Comparison between pointer and integer ('std::__1::basic_string, std::__1::allocator >::value_type' (aka 'char') and 'const char *')

我在 Internet 上搜索了足够多的内容,知道数组样式访问在字符串中没有问题。错误主要是指出指针和整数的比较。真的吗?我以为我正在将字符 H 与字符串 str.

中的另一个字符进行比较

我试过如果 str[mid] 真的 returns 一个我应该做的迭代器 *str[mid]。不!也没用。

您想与单个 char

进行比较
if (str[mid] == 'H' && str[mid] != 'W') return;

请注意,在这种情况下,双引号指的是 const char[] 而单引号指的是单个 char.

警告告诉您,在您的情况下进行这些比较的唯一方法是将 lhs charstr[mid] 的结果)与 rhs 进行比较,即让数组衰减到 const char* 并将指针地址与 char.

进行比较

在if语句的表达式中

 if(str[mid] == "H" && str[mid] != "W") return;

具有类型 const char[2] 的字符串文字 "H" 和 "W" 被隐式转换为指向其类型 const char *.[=19= 的第一个字符的指针]

因此您试图将表达式 str[mid] 返回的字符与指针进行比较。

您需要使用字符文字而不是字符串文字来比较字符

 if(str[mid] == 'H' && str[mid] != 'W') return;

你也可以这样写

 if(str[mid] == *"H" && str[mid] != *"W") return;

 if(str[mid] == "H"[0] && str[mid] != "W"[0]) return;

解引用指针,但这会造成混淆

注意,如果 str[mid] == 'H' 那么第二个操作数将始终返回 true。所以写

就够了
 if( str[mid] == 'H' ) return;