如何在C+;中使用开关大小写比较字符串+; 对于C++,我是超级新手。
我必须做一个解析器。获取一个类似“34+5-(9*8)”的输入,并将其插入到二叉树中。我的想法是比较字符串中的每个字符,确定该字符是数字还是simbol(+、-、*、/,等等),然后将其插入到队列中以使用后缀符号,然后将其插入到二叉树上 我想要的是要求用户输入字符串,将字符串拆分为字符,然后进行比较 差不多如何在C+;中使用开关大小写比较字符串+; 对于C++,我是超级新手。,c++,string,parsing,switch-statement,C++,String,Parsing,Switch Statement,我必须做一个解析器。获取一个类似“34+5-(9*8)”的输入,并将其插入到二叉树中。我的想法是比较字符串中的每个字符,确定该字符是数字还是simbol(+、-、*、/,等等),然后将其插入到队列中以使用后缀符号,然后将其插入到二叉树上 我想要的是要求用户输入字符串,将字符串拆分为字符,然后进行比较 差不多 #include <iostream> #include <string> using namespace std; string cadena; string
#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;
}
#包括
#包括
使用名称空间std;
弦卡德纳;
字符串数字;
int i;
int main(){
cout>cadena;
对于(i=0;i您的switch语句中的大小写标签现在是字符串,但您要分析的字符串的每一部分都是字符。请尝试将大小写标签中的双引号更改为单引号。例如:
switch (cadena[i]) {
case '0':
/* ... */
}
更一般地说,case标签中的常量必须是整型数值常量,如int、char、short等。您不能在其中放置其他类型的值
也就是说,您可能希望从标题
中查看isdigit
函数,它直接测试字符是否为数字
希望这有帮助!您的switch语句中的大小写标签现在是字符串,但您要分析的字符串的每一部分都是字符。请尝试将大小写标签中的双引号更改为单引号。例如:
switch (cadena[i]) {
case '0':
/* ... */
}
更一般地说,case标签中的常量必须是整型数值常量,如int、char、short等。您不能在其中放置其他类型的值
也就是说,您可能希望从标题
中查看isdigit
函数,它直接测试字符是否为数字
希望这有帮助!而不是
case "0":
case "1":
使用
(当然还有其他人)而不是
case "0":
case "1":
使用
(当然,对于其他人来说)如果没有某种自定义函数调用,就不能将字符
与字符串文字(typeconst char*
)进行比较。但是,可以将其与另一个字符
进行比较。替换“0”、“1”使用'0','1',…
进行编译。如果没有某种自定义函数调用,则无法将字符
与字符串文字(键入常量字符*
)进行比较。但是,您可以将其与另一个字符
进行比较。请替换“0”,“1”使用'0','1',…
进行编译。您不能使用字符串(const char*
值)作为大小写标签。此外,numero+=cadena[i]
并没有做您认为会做的事情:该值将显著关闭。您应该使用numero=10*numero+(cadena[i]'0')
此外,开关
完全没有必要:您可以使用isdigit(cadena[i])
最后,您甚至不需要循环:有一个非常方便的函数可以满足您的需要:
numero = atoi(cadena.c_str());
您不能使用字符串(const char*
value)作为大小写标签。而且,numero+=cadena[i]
没有做您认为它做的事情:该值将显著关闭。您应该改用numero=10*numero+(cadena[i]'0')
此外,开关
完全没有必要:您可以使用isdigit(cadena[i])
最后,您甚至不需要循环:有一个非常方便的函数可以满足您的需要:
numero = atoi(cadena.c_str());
<代码> int iStId(int CH);< /Cord>谢谢所有的回复。答案来自于我已经拥有的一个项目。解决方案是将Calne[i]转换为int int=(int)CaleN[i],然后与ASCII值进行比较。抱歉,我对C++是很陌生的,我也讨厌HAHA <代码> int ISDIGIND(int CH)。这个答案来自于我已经拥有的一个项目。解决方案是把Calnina [i]转换成int int=(int)cDeNe[i],然后与ASCII值进行比较。对不起,我对C++是很新的,我也讨厌它。