[英]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
。
您有兩種選擇:
最簡單:只需比較字符:
if (next == '\\'')
注意這里的單引號,它告訴編譯器您需要一個字符而不是一個字符串。
或將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.