C ++比较一个字符

时间:2014-05-16 17:20:40

标签: c++ compare

我在比较字符方面遇到了问题。

比较字符串有效:

(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'

5 个答案:

答案 0 :(得分:2)

这是因为char不是string

您有两种选择:

  1. 最简单:只需比较char:

    if (next == '\'')
    

    请注意这里的单引号,告诉编译器您需要单个字符而不是字符串。

  2. 或者将char转换为字符串:

    std::string next(1, input.peek());
    if (next == "'")
    

    1告诉std::string您希望拥有多少这些字符。您可以在此使用==(对于涉及std::string¹的所有比较)而不是比较方法,后者更具可读性。

  3. 错误消息的解释: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
}