我对编程很陌生,我制作的代码让我很困惑。你能解释下面的错误吗?
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)
答案 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座位