#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
int main()
{
std::string sentence;
std::cout << "Sentence: ";
std::getline(std::cin, sentence);
std::stringstream sstrin(sentence);
int spaces = std::count(sentence.begin(), sentence.end(), ' ');
std::vector<std::string> chunks;
chunks.reserve(spaces + 1);
while (sstrin) {
std::string tmp;
sstrin >> tmp;
chunks.push_back(tmp);
}
std::ostream_iterator<std::string> strout(std::cout, " ");
std::cout << "Words in reverse:\n";
std::copy(chunks.rbegin(), chunks.rend(), strout);
std::cout << "\nFull Mirror:\n";
std::ostream_iterator<char> charout(std::cout);
std::copy(sentence.rbegin(), sentence.rend(), charout);
std::cout << '\n';
}
Немного непонятно, что вы имеете в виду под реверсом. Ваш код указывает на то, что я бы назвал «полным зеркалом», где все символы расположены в обратном порядке. Но есть вероятность, что вам просто нужно перевернуть слова, и это первое, о чем я думаю, когда люди говорят, что хотят перевернуть предложение. В зависимости от того, что вы хотите, go ваше мнение об этом различается.
Для слов в обратном порядке мне нужно убедиться, что каждое слово рассматривается как отдельная сущность. Для этого я объявляю вектор строк, где каждый элемент будет отдельным словом. Я использую строковый поток, поскольку он разделяет слова для меня, без необходимости писать функцию для проверки предложения вручную. Это связано с тем, что по умолчанию потоки разделяются пробелами. Как только вектор заполнится словами, я go о печати их в обратном порядке. Я делаю это с помощью std::ostream_iterator
. Это просто более компактно, чем основанное на диапазоне for, и позволяет мне использовать преимущества обратных итераторов вектора; это избавляет меня от необходимости переворачивать вектор.
Для «полного зеркала» я аналогичным образом использую std::ostream_iterator
, но он состоит из символов, потому что я использую обратные итераторы исходного предложения. Отдельные элементы строки представляют собой символы.
Наконец, нет указания, нужно ли вам сохранять эти перевернутые предложения, поэтому я не беспокоюсь.