如何在C++中使用开关大小写来比较字符串
How to compare a string using a switch case in C++
我是C++的新手。
我必须做一个解析器。取一个类似"34+5-(9*8)"的输入,并将其插入到二叉树中。我的想法是比较字符串中的每个字符,确定该字符是数字还是simbol(+、-、*、/等),并将其插入队列中以使用后缀表示法,然后将其插入二进制树
我想要的是让用户输入字符串,将字符串拆分为字符,然后比较
类似的东西
#include <iostream>
#include <string>
using namespace std;
string cadena;
string numero;
int i;
int main(){
cout<< "Type String";
cin>> cadena;
for (i=0; i<cadena.length(); i++){
switch(cadena[i]{
case "0":
case "1":
case "2":
...
case "9":
numero+=cadena[i];
}
cout << numero<<endl;
numero="";
}
return 0;
}
但编译器抱怨我无法将当前字符(cadena[i]
)与字符串("0")进行比较。
有人能告诉我该怎么办吗?
我已经尝试过使用char代替std:string
,阅读其他问题等。
switch语句中的case标签现在是字符串,但您正在解析的字符串的每一部分都是一个char。尝试将大小写标签中的双引号更改为单引号。例如:
switch (cadena[i]) {
case '0':
/* ... */
}
通常情况下,大小写标签中的常量必须是整数常量,如int、char、short等。您不能在其中放置其他类型的值。
也就是说,您可能需要查看标题<cctype>
中的isdigit
函数,该函数直接测试字符是否为数字。
希望这能有所帮助!
而不是
case "0":
case "1":
使用
case '0':
case '1':
(当然还有其他)
不能使用字符串(const char*
值)作为大小写标签。此外,numero+=cadena[i]
并没有做你认为它会做的事情:该值将显著降低。您应该使用numero = 10*numero + (cadena[i] - '0')
。
此外,switch
是完全不必要的:您可以使用isdigit(cadena[i])
。
最后,您甚至不需要循环:有一个非常方便的函数可以满足您的需要:
numero = atoi(cadena.c_str());
如果没有某种自定义函数调用,就无法将char
与字符串文字(类型为const char *
)进行比较。但是,您可以将其与另一个char
进行比较。将"0"、"1"等替换为'0', '1', ...
,您应该进行编译。
- 无法找到简单的开关大小写枚举错误
- 如何在不同的开关大小写语句上使用对象的类成员函数?
- Rand()大小写开关在多次迭代后运行到无穷大
- 在这种情况下,如何在基类中设计开关大小写函数
- 无法在开关大小写中调用函数 - C++
- 开关大小写始终为默认值
- 使用开关大小写语句抽取随机扑克牌等级和花色以显示用户
- C++:如果用户输入数字将其转换为单词,并且如果按回车键程序应退出,则使用开关大小写
- C ++使用开关/大小写解析protobuf消息(减少重复代码)
- C++函数中未定义的开关大小写
- 开关大小写不调用其中的函数
- 为什么我的代码在开关大小写中不起作用
- 开关大小写语句中函数中的字符串输入会导致无限循环和绕过输入
- 使用 std::string 返回开关大小写块中的字符串常量
- 如何在开关大小写中使用字符
- Rapidjson::Type的开关大小写.我尝试解析的
- 开关大小写错误 |的值在常量表达式中不可用
- 使用 map<string,int> 在开关大小写语句中使用字符串
- C++ 带有终止字符的开关大小写计算器
- 为什么我的菜单不起作用 c++ 大小写开关