繁体   English   中英

ERROR char和const char

[英]ERROR char and const char

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

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)

更改函数以获取std::string而不是单个char 并删除额外的char声明。

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

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

请注意,通过const引用传递结构通常更有效,如上所示。

您的代码看起来像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;
}

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

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

你的意思是?

char seat [SOME_INT_VALUE];

而不仅仅是

char座位

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM