【问题标题】:Comparing chars [C++]比较字符 [C++]
【发布时间】:2018-12-16 19:04:35
【问题描述】:

我遇到了一个小问题。我一直在这里搜索,但我找不到任何东西,所以我想比较2个字符,例如:

char a;
char b[2][2] = {"a", "b"};
cin >> a; //For example I write an "a" letter here
//Then I want to compare them
if(strcmp(a, b[0]) == 0) {
    cout << "True";
}

但我得到一个错误:

error: invalid conversion from 'char' to 'const char*' [-fpermissive]|

是的,我知道,就这么简单,但我就是找不到解决方法。

【问题讨论】:

  • strcmp 比较字符串,而不是单个字符。你可以写a == b[0][0]
  • b[0] 不是字符。

标签: c++ arrays char


【解决方案1】:

这里有一些关于 C/C++ 和 charC strings 的基础知识。

字符串文字,如“a”或“b”的类型为const char [](或char const [],它们是相同的),它不是char,但标准还说,

不是宽字符串文字的字符串文字(2.13.4)可以转换为“指向char的指针”类型的右值;宽字符串文字可以转换为“指向 wchar_t 的指针”类型的右值

在C/C++中,如果你想比较两个chars,你可以使用==操作符。如果要比较两个 C 字符串(字符串以空字符结尾),可以使用strcmp(char const * a, char const * b)。这里 a 和 b 都必须是 const char *。同样基于标准,const char [] 可以转换为const char *

您还可以使用字符串文字来初始化 char 数组,例如在您的示例中,b[2][2] = {"a", "b"}

现在 b[0] 的类型为 char [2],可以转换为 const char *。但在您的示例代码中,a 是一个字符,而不是 char const *

因此,为了让您的代码正常工作,您只需 if (a == b[0][0]) 即可比较两个 chars。

【讨论】:

  • "a" 的类型为 char const[2]。数组和指针不一样
  • 我仔细检查过,你是对的。让我来解答
  • @CSPei String literals are arrays。字符串字面量,就像所有 C 风格的数组一样,会衰减为指向它们的第一个元素的指针,这就是经常出现这种误解的原因。
猜你喜欢
  • 2021-11-19
  • 2016-02-08
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 2011-03-27
  • 2011-09-17
相关资源
最近更新 更多