如何在C+;中使用开关大小写比较字符串+; 对于C++,我是超级新手。

如何在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

我必须做一个解析器。获取一个类似“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;
}
#包括
#包括
使用名称空间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":
使用


(当然,对于其他人来说)

如果没有某种自定义函数调用,就不能将
字符
与字符串文字(type
const 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++是很新的,我也讨厌它。