C ++将char与字符串文字进行比较

时间:2013-02-07 05:06:22

标签: c++ char compare

在这里开始程序员......

我正在为我的计算机科学课写一个非常简单的程序,我遇到了一个我想更多了解的问题。这是我的代码:

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
    char courseLevel;

    cout << "Will you be taking graduate or undergraduate level courses (enter 'U'"
            " for undergraduate,'G' for graduate.";
    cin >> courseLevel;

    if (courseLevel == "U")
    {
        cout << "You selected undergraduate level courses.";
    }

    return 0;
}

我的if语句收到两条错误消息: 1)未指定与字符串文字进行比较的结果(改为使用strncmp)。 2)指针和整数之间的比较('int'和'const char *')。

我似乎已经通过将我的U封在单引号中解决了这个问题,或者该程序至少仍然有效。但是,正如我所说,我只是想明白我为什么会收到这个错误,这样我才能更好地理解我正在做的事情。

3 个答案:

答案 0 :(得分:5)

您需要使用单引号。

在C,(和许多其他语言)中,character constant是单引号中包含的字符 1

'U'

虽然string literal是双引号中包含的任意数量的字符:

"U"

您将courseLevel声明为单个字符:char courseLevel;因此,您只能将其与另一个char进行比较。

执行if (courseLevel == "U")时,左侧是char,而右侧是const char* - 指针到第一个char 1}}在该字符串文字中。你的编译器告诉你这个:

  

指针和整数('int'和'const char*')

之间的比较

所以你的选择是:

if (courseLevel == 'U')       // compare char to char

或者,为了举例:

if (courseLevel == "U"[0])    // compare char to first char in string

  1. 注意完整性:您可以拥有mulit-character constants

    int a ='abcd'; // GCC中的0x61626364

  2. 但这肯定不是你想要的。

答案 1 :(得分:2)

拉普兹是对的,但我认为更多的阐述应该有所帮助...

courseLevel == "U"

在C和C ++中,双引号创建字符串文字 - 这是字符数组,以数字-0 ASCII-NUL终止哨兵字符结束,因此程序可以在文本结束的地方找到工作。所以,你基本上都在问一个字符是否等于一个字符数组......它们只是无法比较。类似的有效问题是:

  • 此字符变量是否包含特定字符值:courseLevel == 'U'
  • 此字符变量是否出现在特定数组中:strchr(courseLevel, "U")
  • 此字符变量是否与特定数组中的第一个元素匹配:courseLevel == "U"[0]

当然,第一个是在你的程序中具有直观意义的那个。

答案 2 :(得分:1)

您收到错误的原因是因为C和C ++中的字符串文字以空终止字符\0结尾,而单个字符不是。因此,当您将char与字符串文字进行比较时,您需要将字符文字与字符数组{'U','\0'}进行比较。

相关问题