Мой код падает после того, как мой cin может я получить совет относительно того, что я сделал неправильно - PullRequest
0 голосов
/ 02 апреля 2020

Я борюсь с этим кодом, я не могу понять это. Вот вопрос: напишите программу, которая использует один стек для проверки правильности разграничения строки, содержащей скобки, скобки и скобки? это то, что я написал до сих пор, но я не могу это увидеть. Там нет ошибок, и он компилируется, но он вылетает после ввода строки. Как мне это исправить?

#include <iostream>
#include <string>
#include <stack>
using namespace std;

bool isbalanced(string);

int main()
{
    string s;

    cout<< "This program checks to see if the delimiters are properly balanced" << endl;
    cout << "Enter a string with some paranthesis" << endl;
    getline(cin, s);

    if (isbalanced(s))
        cout << "The string has balanced paranthesis" << endl;
    else
        cout << "String does not have balanced parathesis" << endl;

    return 0;
}
bool isbalanced(string s)
{
    stack<char> stack;
    char ex;
    for (unsigned int k = 0; k = s.length(); k++)
    {
        switch (s[k])
        {
        case '(': stack.push(')');
            break;
        case'{': stack.push('}');
            break;
        case '[': stack.push(']');
            break;
        case ')':
        case '}':
        case ']':
            ex = stack.top();
            stack.pop();
            if (ex != s[k])
            {
                return false;
            }
            break;
        deafult:break;
        }
    }
    if (stack.empty())
        return true;
    else
        return false;

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Вы достигаете конца строки в for l oop, попробуйте:

for (unsigned int k = 0; k < s.length(); k++)

Также рассмотрите возможность передачи const std::string& вместо копирования параметра.

И удалить using namespace std;

1 голос
/ 02 апреля 2020

Проблема с л oop. В частности, вторая его часть.
Вы присваиваете значение k, а не сравниваете его с чем-то.
k = s.length() один знак равенства является присваиванием.
Вы, вероятно, хотели сделать k < s.length()

Я хотел создать свой собственный ответ, чтобы подчеркнуть тот факт, что вы можете скомпилировать, потому что код правильный, назначение переменной действительно дает правдивое логическое значение. Затем в l oop он получает доступ к s[s.length()], который выходит за границы, поскольку массивы (как строка) начинаются с 0, а не 1. Длина на единицу больше окончательного индекса, потому что это фактическая длина.

...