ERROR字符和const字符
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;
}
错误:操作数类型不兼容(字符和常量字符)
将函数更改为使用一个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〕;
而不仅仅是
字符座
相关文章:
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- 为什么 const int 适用于字符大括号初始化?
- 为什么我不能使用与"常量字符*"相同的"const int*"创建一个 int 数组?
- 为什么静态常量字符 * const 变量在为左值时可绑定到右值引用参数
- std::转换为常量字符 * 的字符串在 std::unordered_set<const 字符 * 中找不到>
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- 将 const std::vector<char> 转换为无符号字符*?
- 如何从const char *类型字符串中删除新线字符
- 将字符数组添加到 const string&in C++
- 使用 const 指针的 C 样式字符返回不正确的结果
- ERROR字符和const字符
- C++:如何将'const char*'转换为字符
- C++ : 为什么我不能使用 sprintf 打印 const 字符*?
- 将 const 无符号字符* 分配给执行就地替换或省略的 std::string
- 赛格在一辆汽车上出错,从无符号的字符转换为 const 字符 在C++
- 通过连接另一个字符*初始化const字符*
- 比较 C++ 中的字符 - 类型为"char"的参数与类型为"const char * "的参数不兼容
- 存储const char*会给我随机字符