Другие языки программирования и технологии

C++. Поменять местами слова в строке

Пользователь вводит строку из 4 слов. Поменять местами первое и последнее слова.
Например: На столе много еды
Вывод: еды столе много На
#include
#include
#include
using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string Line;
cout << "Введите строку: \n";
getline(cin, Line);
for (int i = 0; i <= Line.size(); i++)
{

}
}
А дальше мой мозг сказал пока (
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
string rsl(const string& line) {
istringstream iss(line);
vector<string> box;
string token;
while (iss >> token) box.push_back(token);
iter_swap(box.begin(), box.end() - 1);
string rs;
for (auto& item : box) rs += item + ' ';
rs.pop_back();
return rs;
}
int main() {
system("chcp 1251 > nul");
cout << "Строка: ";
string line;
getline(cin, line);
line = rsl(line);
cout << line << '\n';
system("pause > nul");
}
Андрей Петров
Андрей Петров
53 086
Лучший ответ
Алексей Бондарев Как много неизвестных для меня операторов...
Ключевые слова — «Пользователь вводит» — значит, ввод всё-таки нужен!
В этом случае даже необязательно воспринимать строку целиком! Стандартный форматный потоковый ввод сам разделяет данные в потоке на отдельные слова. После ввода 4 слов остаётся вывести их в правильном порядке.

Предлагаю использовать массив типа string из 4 элементов. А расположить слова в заданном порядке поможет константа 39.

string AoW[4]; // массив для 4 слов
int IndMask = 39; // 00 10 01 11 или 0←2←1←3
for (int i = 0; i < 4; ++i) {
cin >> AoW[IndMask & 3]; // IndMask & 3 — правильный индекс с учётом обмена
IndMask >>= 2; // выталкиваем отработанное
}
for (int i = 0; i < 4; ++i) cout << AoW[i] << ' '; // вывод по словам
Lioha Yavorasky
Lioha Yavorasky
16 172
Lioha Yavorasky Важно: требуется подключение библиотек:

#include <iostream>
#include <string>
Lioha Yavorasky Выталкивание двух младших разрядов равносильно целочисленному делению на 4.

39 / 4 = 9, 9 / 4 = 2, 2 / 4 = 0   = >   39→9→2→0

39 & 3 = 3
9 & 3 = 1
2 & 3 = 2
0 & 3 = 0

При вводе индекс принимает значения 3→1→2→0.
При выводе индекс принимает значения по возрастающему счётчику.
Lioha Yavorasky Две альтернативы:

а) использовать константу 213 и деление на 10,
б) использовать массив индексов {3, 1, 2, 0}.
Lioha Yavorasky ✓ Кстати, Алекс Куха совершенно верно предложил Вам метод класса string — метод swap.

С этим методом программа упрощается предельно.

I. Ввод по словам, индекс — по возрастающему счётчику (цикл for).
II. Обмен между первым и последним элементами массива (например, AoW[0].swap(AoW[3]); ).
III. Вывод по словам, индекс — по возрастающему счётчику.