簡體   English   中英

C ++比較字符

[英]C++ comparing a character

我在比較字符時遇到問題。

比較字符串的工作原理:

(strBuffer.compare("false") == 0)

(其中strBuffer是字符串類型)

char next = input->peek();
if(next.compare("'")== 0)

(我需要檢查下一個是否是單引號)

錯誤提示:

error: request for member 'compare' in 'next', which is of non-class type 'char'

這是因為char不是string

您有兩種選擇:

  1. 最簡單:只需比較字符:

     if (next == '\\'') 

    注意這里的單引號,它告訴編譯器您需要一個字符而不是一個字符串。

  2. 或將char轉換為字符串:

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

    1告訴std::string您想要多少個這些字符。 您可以在此處使用== (以及所有涉及std::string string¹的比較)而不是compare方法,因為該方法更具可讀性。

錯誤消息的解釋: char是原始(非類)類型。 因此,嘗試訪問char成員(例如您的情況下, compare )將無法工作,因為char變量沒有任何成員。 char通常是8位寬的整數,在編程語言中恰好可以將其表示為8位字符(您也可以將數字分配給char,例如char next = 10 )。


1:如果您以這種方式使用它,將不起作用: if ("a" == "b") ,這將無法完成您期望的操作(未指定的行為)。

字符是基元 ,不是對象(字符串)。 您可以直接將其與單引號進行比較,單引號用於表示單個字符:

if (next == '\'') { ... }

反斜杠是轉義字符,由於我們試圖檢查用作定界符的字符,因此反斜杠是必需的。

並且,要比較您的字符串,可以使用相同的語法,但要用雙引號引起來:

if (strBuffer == "false") { ... }

那應該工作:

if(next == '\'')
{
   std::cout << "Got it" << std::endl;
}

您可以使用==運算符直接比較字符:

if(next == '\'')

char next =輸入-> peek();

if(next ==  '\'')
{
    //do something
}

您也可以:

if (strBuffer == "false")
{
    //do something
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM