为什么这个括号匹配的问题,能够编译成功但是不能成功运行?

可以帮我解答一下吗?

#include<iostream>
#include<stack>
using namespace std;
int main()
{
    stack<char> stk;
    char s[] = "[{()}]";
    bool flag = true;
    int i = 0;
    while (s[i] != '\0')
    {
        if (s[i] == '(' || s[i] == '[' || s[i] == '{')
            stk.push(s[i]);
        else if (s[i] == '}')
        {
            if (stk.top() == '{' && !stk.empty())
            {
                stk.pop();
            }
            else
            {
                cout << "无法匹配!" << endl;
                flag = false;
                break;
            }
        }
        else if (s[i] == ']')
        {
            if (stk.top() == '[' && !stk.empty())
            {
                stk.pop();
            }
            else
            {
                cout << "无法匹配!" << endl;
                flag = false;
                break;
            }
        }
        else if (s[i] == ')')
        {
            if (stk.top() == '(' && !stk.empty())
            {
                stk.pop();
            }
            else
            {
                cout << "无法匹配!" << endl;
                flag = false;
                break;
            }
        }
    }
    if (flag==true&&stk.empty())
    {
        cout << "括号匹配成功!" << endl;
    }
    else
    {
        cout << "括号匹配不成功!" << endl;
    }
}

img

你少了一个i++,所以while语句一直执行。死循环了。
代码

#include<iostream>
#include<stack>
using namespace std;
int main()
{
    stack<char> stk;
    char s[] = "[{()}]";
    bool flag = true;
    int i = 0;
    while (s[i] != '\0')
    {
        if (s[i] == '(' || s[i] == '[' || s[i] == '{')
        {
            stk.push(s[i]);
        }
        else if (s[i] == '}')
        {
            if (stk.top() == '{' && !stk.empty())
            {
                stk.pop();
            }
            else
            {
                cout << "无法匹配!" << endl;
                flag = false;
                break;
            }
        }
        else if (s[i] == ']')
        {
            if (stk.top() == '[' && !stk.empty())
            {
                stk.pop();
            }
            else
            {
                cout << "无法匹配!" << endl;
                flag = false;
                break;
            }
        }
        else if (s[i] == ')')
        {
            if (stk.top() == '(' && !stk.empty())
            {
                stk.pop();
            }
            else
            {
                cout << "无法匹配!" << endl;
                flag = false;
                break;
            }
        }
        i++;    //少了这句话
    }
    if (flag==true&&stk.empty())
    {
        cout << "括号匹配成功!" << endl;
    }
    else
    {
        cout << "括号匹配不成功!" << endl;
    }
}

缺少了i++

你没有添加i++操作,i一直为0