Пожалуйста, помогите мне в следующей проблеме преобразования выражения спой вот ссылка. Это дает ошибку во время выполнения.
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
int testcases;
cin >> testcases;
while(testcases-->0)
{
string s;
cin >> s;
cout << s;
stack<string> st;
for(int i=0;i<s.length();i++)
{
if(s.at(i)=='(')
continue;
else
if(s.at(i)==')')
{
string s2=st.top();
st.pop();
string expression=st.top();
st.pop();
string s1=st.top();
st.pop();
string tba=s1+s2+expression+"";
st.push(tba);
cout << tba << endl ;
}
else
st.push(s.at(i)+"");
}
string ss=st.top();
cout << ss;
}
}
И ошибка не понятна.
Далее следует ошибка при вводе в первой и второй строке.
1
(a+(b*c))
(a+(b*c))do relocation protocol version %d.
o relocation protocol version %d.
uery failed for %d bytes at address %p
udo relocation protocol version %d.
do relocation protocol version %d.
o relocation protocol version %d.
uery failed for %d bytes at address %pery failed for %d bytes at address %p
udo relocation protocol version %d.
do relocation protocol version %d.
o relocation protocol version %d.
uery failed for %d bytes at address %pery failed for %d bytes at address %p
Похоже, вы стали жертвой Java-изма.
char ch = 'a';
string str = value + "";
не делает string str
«А».
Это потому что ""
это не string
, Это на самом деле указатель на постоянный символьный массив, const char *
и, поскольку это указатель, имеет место арифметика указателя.
""
это какое-то место в памяти. Давайте предположим адрес 10000. 'a'
имеет числовое значение. Давайте придерживаться ASCII и использовать 97. value + "";
говорит компилятору перейти по адресу 10000 + 97, и никто не знает, что он найдет по адресу 10097. Но это const char *
, а также string
имеет конструктор, который будет принимать const char *
и попытаться превратить его в string
, Что бы ни случилось на 10097, будет использовано, чтобы сделать это string
, Это может привести к сбою программы. Он также может захватывать мусор из строки строковых литералов, и похоже, что это происходит с OP.
Решение:
Построить string
,
string str(1, ch);
или в случае ОП,
st.push(string(1, s.at(i)));
Документация по string
конструктор Смотри конструктор 2.
Но будь осторожен. У вас есть куча других логических ошибок лучше всего решается с помощью программного обеспечения для отладки это почти наверняка пришло с вашей средой разработки.
Других решений пока нет …