БлогNot. C++: нумеруем скобки в строке

C++: нумеруем скобки в строке

Ещё одна "скобочная" задача, каковые хорошо применять при изучении синтаксического разбора строк.

Имеется выражение exp длиной n символов, содержащее круглые скобки. Вывести номера скобок в выражении, то есть:

(a+(b/c))-(d*e+(1-f))(();
1  2   21 3    4   43566

Использован стандартный стек, проверено в консоли Visual Studio 2015, трудоёмкость алгоритма равна O(n).

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

void bracketNumbers(string exp, int n) {
 int leftNumber = 1;
 stack <int> rightNumber;
 for (int i = 0; i < n; i++) {
  if (exp[i] == '(') {
   cout << leftNumber;
   rightNumber.push(leftNumber);
   leftNumber++;
  }
  else if (exp[i] == ')') {
   cout << rightNumber.top();
   if (rightNumber.size()>1) //Убрать условие, если скобки обязаны быть парными
    rightNumber.pop();
  }
  else cout << " ";
 }
}

int main() {
 string exp = "(a+(b/c))-(d*e+(1-f))(();";
 cout << exp << endl;
 bracketNumbers(exp, exp.size());
 cin.get(); return 0;
}

28.02.2018, 13:15 [1807 просмотров]


теги: textprocessing c++ числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым