我已經被要求作爲獎金編程挑戰來查看大括號是否匹配隨機字符串或像這樣的字符:{1 + 1}這將返回1,而{1 + 1})會返回0. 這是我迄今爲止的,但它似乎沒有做任何事情。任何幫助將是偉大的?謝謝C++檢查大括號是否匹配
//bonus.cpp
#include <iostream>
#include <string>
#include <queue>
#include <stack>
using namespace std;
int checkBraces (string s)
{
//int myLength = s.length();
std::stack<int> stack;
char d;
for (int i = 0; i < s.length(); i++)
{
char c = s[i];
if (c == '(')
{
stack.push(c);
}
else if (c == '[')
{
stack.push(c);
}
else if (c == '{')
{
stack.push(c);
}
else if (c == ')')
{
if (stack.empty())
{
return false;
}
else
{
d = stack.top();
stack.pop();
if (d != '(')
{
return false;
}
}
}
else if (c == ']')
{
if (stack.empty())
{
return false;
}
else
{
d = stack.top();
stack.pop();
if (d != '[')
{
return false;
}
}
}
else if (c == '}')
{
if (stack.empty())
{
return false;
}
else
{
d = stack.top();
stack.pop();
if (d != '{')
{
return false;
}
}
}
}
if (stack.empty()) return true;
else return false;
}
int main()
{
cout << "This program checks brace ([{}]) matching in a string." << endl;
checkBraces ("{1+1}");
}
您是否嘗試單步執行調試器中的代碼以查看實際發生了什麼? * –
*似乎沒有做任何事情* - 可以在這裏使用更多的信息。 –
你有相當多的冗餘。也許你應該有一個'bool pop_if_possible(std :: stack,char)'方法,這樣你就可以編寫'if(c ==')'&&!pop_if_possible(stack,'(')){return false; }' –
MSalters