我正在尝试比较cpp中的字符串但是我遇到了一堆错误
不匹配'operator =='
从char到const char的无效转换*
我正在实现两个功能:
1)比较字符串并搜索括号,然后返回一个bool。
2)比较字符串并搜索算术运算符,然后返回一个bool。
这是我的代码:
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;
}
答案 0 :(得分:4)
这些功能可以采用以下方式
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;
}
甚至喜欢
#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;
}
答案 1 :(得分:2)
比较 op == ops [i]
比较std :: string和char,如果op是你可以做的一个char字符串 op [0] == ops [i] 代替。
另外,我建议你看一本好的参考书,例如: Josuttis“C ++标准库:教程和参考”。还有不错的在线参考,只有谷歌为他们。在那里你可以找到许多有用的字符串函数,STL算法也可能有用,正如其他海报已经指出的那样。
答案 2 :(得分:0)
你的isOperator()函数总是返回false,因为(如上所述)你试图将字符串与char进行比较。另一方面,如果你将char与char进行比较,它甚至不会起作用,但是你必须尝试op字符串中的每个char。
你必须在if()之后更改return语句。相反,只有当它遍历整个for循环时才返回false。
其他人确实发布了一些更有用的代码,但是另一个问题是,返回运营商(甚至可能是哪个运营商)的位置会不会更有用?