Напишите функцию, которая добавляет скобки в начало и конец, чтобы все скобки совпадали, и возвращает ее - PullRequest
0 голосов
/ 08 ноября 2019

Учитывая строку скобок, например, (((())(((), напишите функцию, которая добавляет скобки в начало и конец, чтобы все скобки совпадали и возвращали ее.

Я пытаюсь выяснить, каквыведите это.

Ввод: )(()(

Ввод: ()(()())

Я пытался использовать cout << pMatch(), но не дает желаемого результата, указанного выше.

Это должно быть так же, как указано выше. Любая помощь приветствуется.

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

string paranFix(string input) {
    string output;
    vector<string> strVector;

    for (unsigned int a = 0; a < input.size(); ++a) {
        if (input[a] == ')') {
            if (strVector.empty()) {
                output += "(";
            }
            else {
                strVector.pop_back();
            }
        }
        else if (input[a] == '(') {
            strVector.push_back(")");
        }
        output += input[a];
    }

    while (!strVector.empty()) {
        output += strVector.back();
        strVector.pop_back();
    }
    return output;
};

int main(){

    string s = "(((())((()"; // Given String

    cout << "INPUT: "; // Need to output --> "INPUT: )(()( "

    cout << "OUTPUT: "; // Need to output --> "OUTPUT: ()(()()) "

    cout << paranFix(s); // This outputs: (((())((())))), which is incorrect

    return 0;
}

Это то, что должен выводить компилятор с заданной строкой скобок (((())((().

Input: `)(()(`

Output: `()(()())`

1 Ответ

0 голосов
/ 08 ноября 2019

Все, я думаю, я понял это! @ RC0993 был первым, кто указал на это!

string s = (((())(((); должно быть string s = ")(()("; // which is the INPUT;

И

cout << "INPUT: " << s << endl;

cout << "OUTPUT: " << pMatch(s) << endl;

Вот что он выводит в отношении string s = ")(()("; // The Input

INPUT: )(()(
OUTPUT: ()(()())

это был просто жестко заданный ввод.

причина, по которой я знал это, потому что я проследил его использование

его использование здесь cout << paranFix(s); // This outputs: (((())((())))), если string s = (((())((();

, который имеет подпись string paranFix(string input);

, таким образом, s становится локальной переменной

(наконец-то! Переменная с приличным именем!)

...