无法将字符串转换为' char *'对于参数错误?

时间:2017-07-23 18:24:04

标签: c++ compiler-errors char boolean

我不明白这个错误在我的C ++代码中的含义

  

错误:无法转换' std :: string {aka std :: basic_string}'至   '焦炭'争论' 1' to' bool areParenthesesBalanced(char *)'

     

如果(areParenthesesBalanced(STR))

我的代码:

bool areParenthesesBalanced(char expr[])
{
    stack<char> s;
    char a, b, c;

    for (int i=0; i<strlen(expr); i++)
    {
        if (expr[i]=='(' || expr[i]=='[' || expr[i]=='{')
        {
            s.push (expr[i]);
        }
        else
        {
            switch (expr[i])
            {
                case ')':
                a = s.top();
                s.pop();
                if (a=='{' || a=='[')
                cout<<"Not Balanced";
                break;

                case '}':
                b = s.top();
                s.pop();
                if (b=='(' || b=='[')
                cout<<"Not Balanced";
                break;

                case ']':
                c = s.top();
                s.pop();
                if (c=='(' || c=='{')
                cout<<"Not Balanced";
                break;
            }
        }
    }

    if (s.empty())  //check if stack is empty
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    std::ifstream t("file.txt");
    std::string str;
    t.seekg(0, std::ios::end);
    str.reserve(t.tellg());
    t.seekg(0, std::ios::beg);
    str.assign((std::istreambuf_iterator<char>(t)), std::istreambuf_iterator<char>());

    if(areParenthesesBalanced(str))
    {
        cout<<"Balanced";
    }
    else
    {
        cout<<"Not Balanced";
    }
    return 0;
}

我不明白这是什么问题!有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您应该使用std::string::c_str()

请阅读:http://www.cplusplus.com/reference/string/string/c_str/

但顾名思义,这使得您的代码看起来更像C而不是C ++。最好传递std::string的const引用并使用foreach语法(基于范围的for循环)或std::string::size()

修订代码(C ++ 11):

bool areParenthesesBalanced(const std::string &expr)
{
    const std::unordered_map<char, char> parens { {')', '('}, {']', '['}, {'}', '{'} };
    std::stack<char> paren_stack;

    for (const auto chr : expr)
    {
        switch (chr)
        {
        case '(':
        case '[':
        case '{':
            paren_stack.push(chr);
            break;

        case ')':
        case ']':
        case '}':
        {
            const auto val = paren_stack.top();
            paren_stack.pop();
            if (parens.find(chr)->second != val) {
                std::cout << "Not Balanced";
                return false;
            }
            break;
        }

        default:
            break;
        }
    }

    return paren_stack.empty();
}

答案 1 :(得分:0)

您可能希望将函数声明更改为:

bool areParenthesesBalanced(const std::string& expr)

无需转换为char []。您可以将[]运算符与字符串一起使用。