C/C++

Распечатать слова данного текста в обратном порядке c++ Надо переделать с помощью указателей

Надо переписать программу, чтобы реализация была при помощи указателей.

cin.ignore();
string str;
stack<char>obj;
cout << "Ввод текста: ";
getline(cin,str);
for(int i = 0; i<str.size(); ++i)
obj.push(str[i]);

cout << "Обратный текст: ";
while(obj.size())
{
cout << obj.top(); //так как в ведро помещены яблоки, то вытаскивается последнее помещенное яблоко в первую очередь
obj.pop();//так как яблоко вытащили, его надо выбросить
}
Метод push() шаблона std::stack в качестве аргумента принимает ссылку на тип. Так что даже если вы параметризируете тип шаблона параметром const char*, то все элементы стека будут указывать на один и тот же адрес, потому что вы передаёте в качестве аргумента ссылку на указатель. А это один и тот же указатель, и хранит он то значение, которое было присвоено ему последним. Таким образом в вашем стеке все элементы будут одинаковыми. Поэтому ваша идея плоха, либо тот, кто задал вам это задание умышленно хотел чтобы вы столкнулись с подобного рода проблемой. Ваша задача решается с использованием шаблона строк std::string, который, как известно, хранит данные в динамическом массиве и при каждом вызове создаёт новый его экземпляр, оставляя за собой право освобождать ресурсы динамической памяти. Вам же в этом случае пришлось в цикле выделять память под хранение каждого слова по отдельному указателю и затем освобождать её самостоятельно. Но так как количество слов вам заранее не известно, то вам пришлось бы выделять память по двойному указателю char** и делать рваный динамический массив. Зачем так заморачиваться, если в STL уже есть шаблон для символьных строк?

#include <iostream>
#include <stack>
#include <sstream>
#include <string>
using namespace std;
int main() {
cout << "Text: ";
string text;
getline(cin, text);
stack<string> box;
istringstream iss(text);
string word;
while (iss >> word) box.push(word);
while (!box.empty()) {
cout << box.top() << '\n';
box.pop();
}
system("pause > nul");
}
Берик Шамшиев
Берик Шамшиев
74 563
Лучший ответ
Borbad_208 Said Bostonguhar Большое спасибо за подробное объяснение!
Лайтовое задание.
Сергей Дичко
Сергей Дичко
23 484
Поиском нужно учиться пользоваться. Вот, уже давно делал: https://pastebin.com/2wwexW0d
Сергей Дичко Ну не тебе точнее, а ему.