Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cpp中的字符串比较_C++ - Fatal编程技术网

C++ cpp中的字符串比较

C++ cpp中的字符串比较,c++,C++,我试图在cpp中比较字符串,但我得到了一系列错误,如 与“operator==”不匹配 从字符到常量字符的转换无效* 我正在实现两个功能: 1)比较字符串并搜索括号,然后返回布尔值。 2)比较字符串并搜索算术运算符,然后返回布尔值 这是我的密码: bool isBracket(const string b) { if(b == ")" || b=="(") return true; else return false; } boo

我试图在cpp中比较字符串,但我得到了一系列错误,如
与“operator==”不匹配 从字符到常量字符的转换无效*

我正在实现两个功能:
1)比较字符串并搜索括号,然后返回布尔值。
2)比较字符串并搜索算术运算符,然后返回布尔值

这是我的密码:

bool isBracket(const string b)
{
    if(b == ")" || b=="(")
            return true;
    else
            return false;
}

bool isOperator(const string op)
{
    string ops= "*+-^/";
    for(int i = 0; i < ops.length(); i++)
    {
            if (op == ops[i])
                    return true;
            else 
                    return false;
    }
}

int main()
{
    string exp="(a+b)";

    for(int i=0; i < exp.size(); i++)
    {
        cout<<exp[i]<<endl;
        if(isBracket(exp[i]))
                cout<<"bracket found"<<endl;
        if(isOperator(exp[i]))
                cout<<"operator found"<<endl;
    }
    return 0;
}
bool isBracket(常量字符串b)
{
如果(b==”)| | b==”(“”)
返回true;
其他的
返回false;
}
布尔等参器(常数串op)
{
字符串ops=“*+-^/”;
对于(int i=0;icout函数可以如下所示

bool isBracket( const string &b )
{
    return b.find_first_of( "()" ) != std::string::npos;
}

bool isOperator( const string &op )
{
    return op.find_first_of( "*+-^/" ) != std::string::npos;
}
或者,如果您只比较字符串的元素,那么函数可以如下所示

#include <cstring>
//...

bool isBracket( char b )
{
            const char *brackets = "()"; 
            return std::strchr( brackets, b ) != NULL; 

}

bool isOperator( char op )
{
            const char *ops = "*+-^/";
            return std::strchr( ops, op ) != NULL; 
}
#包括
//...
布尔括号(字符b)
{
const char*方括号=“()”;
返回std::strchr(括号,b)!=NULL;
}
布尔等参器(字符操作)
{
常量字符*ops=“*+-^/”;
返回std::strchr(ops,op)!=NULL;
}
甚至像

#include <cstring>
//...

bool isBracket( char b )
{
            const char *brackets = "()"; 
            return b != '\0' && std::strchr( brackets, b ) != NULL; 

}

bool isOperator( char op )
{
            const char *ops = "*+-^/";
            return op != '\0' && std::strchr( ops, op ) != NULL; 
}
#包括
//...
布尔括号(字符b)
{
const char*方括号=“()”;
返回b!='\0'&&std::strchr(括号,b)!=NULL;
}
布尔等参器(字符操作)
{
常量字符*ops=“*+-^/”;
返回op!='\0'&&std::strhr(ops,op)!=NULL;
}

函数的外观如下

bool isBracket( const string &b )
{
    return b.find_first_of( "()" ) != std::string::npos;
}

bool isOperator( const string &op )
{
    return op.find_first_of( "*+-^/" ) != std::string::npos;
}
或者,如果您只比较字符串的元素,那么函数可以如下所示

#include <cstring>
//...

bool isBracket( char b )
{
            const char *brackets = "()"; 
            return std::strchr( brackets, b ) != NULL; 

}

bool isOperator( char op )
{
            const char *ops = "*+-^/";
            return std::strchr( ops, op ) != NULL; 
}
#包括
//...
布尔括号(字符b)
{
const char*方括号=“()”;
返回std::strchr(括号,b)!=NULL;
}
布尔等参器(字符操作)
{
常量字符*ops=“*+-^/”;
返回std::strchr(ops,op)!=NULL;
}
甚至像

#include <cstring>
//...

bool isBracket( char b )
{
            const char *brackets = "()"; 
            return b != '\0' && std::strchr( brackets, b ) != NULL; 

}

bool isOperator( char op )
{
            const char *ops = "*+-^/";
            return op != '\0' && std::strchr( ops, op ) != NULL; 
}
#包括
//...
布尔括号(字符b)
{
const char*方括号=“()”;
返回b!='\0'&&std::strchr(括号,b)!=NULL;
}
布尔等参器(字符操作)
{
常量字符*ops=“*+-^/”;
返回op!='\0'&&std::strhr(ops,op)!=NULL;
}
比较 op==ops[i]

比较std::string和char,如果op是一个可以执行的单字符字符串 op[0]==op[i] 相反

我建议你看一本好的参考书,例如JuutTuri“C++标准库:教程和参考”,还有不错的在线参考,只是谷歌的。你可以找到很多有用的字符串函数,STL算法也可以有用,就像其他海报已经指出的一样。 op==ops[i]

比较std::string和char,如果op是一个可以执行的单字符字符串 op[0]==op[i] 相反

我建议你看一本好的参考书,例如JuutTuri“C++标准库:教程和参考”。还有不错的在线参考,只是谷歌的。你可以找到很多有用的字符串函数,STL算法也可能有用,就像其他海报已经指出的一样。

<你的ISP()函数总是返回false,因为(如前所述)您尝试将字符串与字符进行比较。另一方面,如果您将字符与字符进行比较,它甚至不起作用,但您必须尝试op字符串中的每个字符

您必须更改if()后面的return语句。相反,仅当它经过整个for循环时才返回false

其他人确实发布了一些更有用的代码,但我的另一个问题是,返回运算符的位置(甚至可能是哪个运算符)会更有用吗?

您的isOperator()函数总是返回false,因为(如前所述)您尝试将字符串与字符进行比较。另一方面,如果您将字符与字符进行比较,这甚至不起作用,但您必须尝试op字符串中的每个字符

您必须更改if()后面的return语句。相反,仅当它经过整个for循环时才返回false


其他人确实发布了一些更有用的代码,但我的另一个问题是,返回操作符的位置(甚至是哪个操作符)不是更有用吗已找到?

请查看完整且未经编辑的错误日志,并指出错误源的位置。此外,您的
isBracket
函数可以简化为
返回(b==”(“| b==”);
ops[i]
是一个
char
。在
std::string
和单个
char
之间没有可比性。请查看完整且未编辑的错误日志,并指出错误源的位置。此外,您的
isBracket
函数可以简化为
return(b==”(“| b==”)
ops[i]
是一个
char
std::string
和单个
char
之间没有可比性。