ERROR字符和const字符

ERROR char and const char

本文关键字:字符 const ERROR      更新时间:2023-10-16

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

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;
}

错误:操作数类型不兼容(字符和常量字符)

将函数更改为使用一个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进行比较。

你是说?

字符座〔SOME_INT_VALUE〕;

而不仅仅是

字符座