我不明白这个错误在我的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;
}
我不明白这是什么问题!有什么想法吗?
答案 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 []
。您可以将[]
运算符与字符串一起使用。