我在比较字符方面遇到了问题。
比较字符串有效:
(strBuffer.compare("false") == 0)
(其中strBuffer的类型为string)
但是
char next = input->peek();
if(next.compare("'")== 0)
(我需要检查下一个是否是单引号)
给出错误:
error: request for member 'compare' in 'next', which is of non-class type 'char'
答案 0 :(得分:2)
这是因为char
不是string
。
您有两种选择:
最简单:只需比较char:
if (next == '\'')
请注意这里的单引号,告诉编译器您需要单个字符而不是字符串。
或者将char转换为字符串:
std::string next(1, input.peek());
if (next == "'")
1
告诉std::string
您希望拥有多少这些字符。您可以在此使用==
(对于涉及std::string
¹的所有比较)而不是比较方法,后者更具可读性。
错误消息的解释:char
是原始(非类)类型。因此,尝试访问char
的成员(例如在您的情况下,compare
)是行不通的,因为char
变量没有任何成员。 char
通常是一个8位宽的整数,恰好在编程语言中可以用8位字符表示(你也可以为字符分配数字,如char next = 10
)。
1:如果您像这样使用它,它将无效:if ("a" == "b")
,这不会达到您的预期(未指定的行为)。
答案 1 :(得分:1)
char是primitive,而不是对象(字符串)。您可以直接将其与单引号进行比较,单引号用于表示单个字符:
if (next == '\'') { ... }
反斜杠是一个转义字符,这是必需的,因为我们正在尝试检查我们用作分隔符的字符。
而且,为了比较你的字符串,你可以使用相同的语法,但使用双引号:
if (strBuffer == "false") { ... }
答案 2 :(得分:1)
这应该有效:
if(next == '\'')
{
std::cout << "Got it" << std::endl;
}
答案 3 :(得分:0)
您可以使用==
运算符直接比较字符:
if(next == '\'')
答案 4 :(得分:0)
char next = input-&gt; peek();
if(next == '\'')
{
//do something
}
你也可以这样做:
if (strBuffer == "false")
{
//do something
}