【问题标题】:String comparison in cppcpp中的字符串比较
【发布时间】:2014-09-21 09:07:39
【问题描述】:

我正在尝试比较 cpp 中的字符串,但我遇到了一堆错误,例如
'operator==' 不匹配
从 char 到 const char 的无效转换 *

我正在实现两个功能:
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;
}

【问题讨论】:

  • 请发布 completeunedited 错误日志,并指出您在源中的哪里得到错误.
  • 另外,你的isBracket函数可以简化为return (b == "(" || b == ")");
  • ops[i]charstd::string 和单个 char 之间没有可比性。

标签: c++


【解决方案1】:

函数可能如下所示

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; 
}

【讨论】:

    【解决方案2】:

    比较 op == ops[i]

    比较一个 std::string 和一个 char,如果 op 是一个单字符的字符串,你可以这样做 操作 [0] == 操作 [i] 而是。

    另外,我建议你看一本好的参考书,例如Josuttis “C++ 标准库:教程和参考”。也有不错的在线参考资料,只有谷歌可供他们参考。在那里你可以找到很多有用的字符串函数,而且 STL 算法也可能很有用,正如其他发帖人已经指出的那样。

    【讨论】:

      【解决方案3】:

      您的 isOperator() 函数将始终返回 false,因为(如前所述)您尝试将字符串与 char 进行比较。另一方面,如果您将 char 与 char 进行比较,它甚至都行不通,但您必须尝试操作字符串中的每个 char。

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

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

      【讨论】:

        猜你喜欢
        • 2013-11-11
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多