ERROR char和const char

时间:2013-12-20 12:54:34

标签: c++ char const

我对编程很陌生,我制作的代码让我很困惑。你能解释下面的错误吗?

int getBill(char seat)// a return function.
{
    int b=0;
    char FS, fs, LBS, lbs, UBS, ubs, GPS, gps;
    char seat;
    if(seat=="FS"||seat=="fs")
    b=15000;
    if(seat=="LBS"||seat=="lbs")
    b=10000;
    if(seat=="UBS"||seat=="ubs")
    b=5000;
    if(seat=="GPS"||seat=="gps")
    b=1500;

    return b;
}

错误:操作数类型不兼容(char和const char)

3 个答案:

答案 0 :(得分:3)

将您的功能更改为std::string而不是char。并删除额外的char声明。

int getBill(const std::string &seat)// a return function.
{
    int b=0;

    if(seat=="FS"||seat=="fs")
     ....

请注意,按const引用传递结构的效率要高usually,如上所示。

答案 1 :(得分:0)

您的代码看起来像C代码。在C“字符串”中是字节数组。大多数函数通过称为“零终止符”(一个值为零的字节)来表示所述数组的结尾。字符串(或“数组”)的各个元素在字符中称为“char”。

逻辑运算只能在适合CPU寄存器的“项目”上执行,即将单个字节与另一个字节进行比较,将整数与另一个整数进行比较。为了比较字符串,您需要执行循环,比较字符串(数组)的每个字符(字节)。幸运的是C带有一个标准库,它包含许多其他有用的东西,包含用于操作字符串的函数。具体来说,函数strcmp将比较两个字符串,并返回第一个不匹配字符的差异,如果遇到零终止符则返回零。

要使用strcmp实现getBill例程,您可以执行以下操作:

#include <string.h> /* contains definition of strcmp() */
int getBill(char *seat)
{
    int b=0;
    char seat;
    if(0 == strcmp(seat, "FS") || 0 == strcmp(seat,"fs"))
      b=15000;
    if(0 == strcmp(seat, "LBS") || 0 == strcmp(seat, "lbs"))
      b=10000;
    if(0 == strcmp(seat, "UBS") || 0 == strcmp(seat, "ubs"))
      b=5000;
    if(0 == strcmp(seat, "GPS") || 0 == strcmp(seat, "gps"))
      b=1500;

    return b;
}

/* example use: */

  getBill("FS);

更高级的“高级”解决方案是使用“不区分大小写”的比较函数,并将定义的值放在“表”中。类似的东西:

#include <string.h> /* contains definition of stricmp() */

static const char* bill_types_str[] =
{
  "fs", "lbs", "ubs", "gps"
};

static const int bill_type_ids[] =
{
  15000, 10000, 5000, 1500
};

int getBill(char *seat)
{
  for(i=0; i < sizeof(bill_types_str)/sizeof(bill_types_str[0]; i++)
    if (0 == stricmp(seat, bill_types_str[i]))
      return bill_types_id[i];

  return 0;
}

这样做,可以很容易地添加新的“账单类型”,并且还允许以后的功能列出支持的“账单类型”。

答案 2 :(得分:0)

您正在尝试将sting(或char数组)与char进行比较。

你的意思是?

  

char seat [SOME_INT_VALUE];

而不仅仅是

  

char座位