字符串 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 char
(str[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;
我是 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 char
(str[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;