I
ivan94
Дана строка, представляющая собой корректное арифметическое выражение, содержащее только имена величин, константы, скобки, и знаки арифметических действий (плюс, минус). Раскройте скобки.
вот что я сделал..(ПРОБЛЕМА в том что если вложенные скобки например -2-(-2-(-2)) выводит бред памагите плиз)
вот что я сделал..(ПРОБЛЕМА в том что если вложенные скобки например -2-(-2-(-2)) выводит бред памагите плиз)
C++:
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cout << "s: "; getline(cin, s);
cout << s << " = ";
int left[10], right[10], c = 0, c1 = 0;
for (int i = 0; i < s.length(); i++){
if (s[i] == ' ') s.erase(i, 1);
if (s[i] == '(') left[c++] = i;
if (s[i] == ')') right[c1++] = i;
}
int t = 0;
for (int j = 0; j < c; j++){
if (left[j] == 0 || s[left[j] - 1] == '+'){s.erase(left[j], 1); s.erase(right[j] - 1, 1);t += 2;}
else{
if (s[left[j] + 1] != '+' && s[left[j] + 1] != '-') {s[left[j]] = '+'; s.erase(right[j], 1); t += 1;}
else{s.erase(left[j], 1); s.erase(right[j] - 1, 1);t += 2;}
for (int i = left[j] + 1; i < right[j]; i++){
if (s[i] == '+') s[i] = '-'; else
if (s[i] == '-') s[i] = '+';
}
}
left[j+1] -= t;right[j+1] -= t;
}
for (int i = 0; i < s.length(); i++){
if (s[i] == '+' && s[i + 1] == '-') s.erase(i, 1);
if (s[i] == '+' && s[i + 1] == '+') s.erase(i, 1);
if (s[i] == '-' && s[i + 1] == '+') s.erase(i + 1, 1);
if (s[i] == '-' && s[i + 1] == '-'){s[i] = '+'; s.erase(i + 1, 1); }
}
//--------------------------------------------------------
cout << s << endl;
system("pause");
return 0;
}