stack — ошибка во время выполнения в c ++. Версия протокола перемещения% d

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

     #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

0

Решение

Похоже, вы стали жертвой 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.

Но будь осторожен. У вас есть куча других логических ошибок лучше всего решается с помощью программного обеспечения для отладки это почти наверняка пришло с вашей средой разработки.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]