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