1.括號匹配問題就是當遇到{( [這些左括號的時 將括號字符入堆疊
2.當遇到右括號時判斷堆疊頂元素是不是與左括號匹配如果匹配就出堆疊
如果不匹配就直接結束程式(即括號匹配失敗)
首先構建堆疊
struct STACK { char num[10]; int top; }; struct STACK* creatstack() { struct STACK* stack = new struct STACK; assert(stack); stack->top = -1;//0 -1這些根據直接所習慣去標記堆疊頂 -1只是先置加 0后置加 return stack; } void push(struct STACK* stack, char ch) { stack->num[++stack->top] = ch; } void pop(struct STACK* stack) { stack->top--; }
呼叫匹配函式 如果回傳true即匹配成功 回傳false即匹配失敗
bool Match(struct STACK* stack, char* match)
{
int len = strlen(match);
for (int i = 0; i < len; ++i)
{
if (match[i] == '{' || match[i] == '[' || match[i] == '(')
{
push(stack, match[i]);
}
if (match[i] == '}' )
{
if (stack->num[stack->top] == '{')
{
pop(stack);
}
else
{
return false;
}
}
if (match[i] == ')' )
{
if (stack->num[stack->top] == '(')
{
pop(stack);
}
else
{
return false;
}
}
if (match[i] == ']' )
{
if (stack->num[stack->top] == '[')
{
pop(stack);
}
else
{
return false;
}
}
}
if (stack->top == -1)
return true;
else
{
return false;
}
}
代碼呼叫 如果是輸出1說明匹配成功 輸出0匹配不成功
int main()
{
struct STACK* stack = creatstack();
char str[10] = "()[][]{}";
cout << Match(stack ,str)<< endl;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/348440.html
標籤:其他
