Пользователь вводит строку из 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++)
{
}
}
А дальше мой мозг сказал пока (
Другие языки программирования и технологии
C++. Поменять местами слова в строке
#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");
}
#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");
}
Алексей Бондарев
Как много неизвестных для меня операторов...
Ключевые слова — «Пользователь вводит» — значит, ввод всё-таки нужен!
В этом случае даже необязательно воспринимать строку целиком! Стандартный форматный потоковый ввод сам разделяет данные в потоке на отдельные слова. После ввода 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] << ' '; // вывод по словам
В этом случае даже необязательно воспринимать строку целиком! Стандартный форматный потоковый ввод сам разделяет данные в потоке на отдельные слова. После ввода 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
Выталкивание двух младших разрядов равносильно целочисленному делению на 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.
При выводе индекс принимает значения по возрастающему счётчику.
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}.
а) использовать константу 213 и деление на 10,
б) использовать массив индексов {3, 1, 2, 0}.
Lioha Yavorasky
✓ Кстати, Алекс Куха совершенно верно предложил Вам метод класса string — метод swap.
С этим методом программа упрощается предельно.
I. Ввод по словам, индекс — по возрастающему счётчику (цикл for).
II. Обмен между первым и последним элементами массива (например, AoW[0].swap(AoW[3]); ).
III. Вывод по словам, индекс — по возрастающему счётчику.
С этим методом программа упрощается предельно.
I. Ввод по словам, индекс — по возрастающему счётчику (цикл for).
II. Обмен между первым и последним элементами массива (например, AoW[0].swap(AoW[3]); ).
III. Вывод по словам, индекс — по возрастающему счётчику.
Похожие вопросы
- C# Парсинг слов из строки без регистра
- найти первую букву второго слова в строке. c++
- Поменять местами 2 Nod'a в TreeView C# (Visual Studio)
- Как поменять местами столбцы в матрице. C++
- Програма на С++ Ввести с клавиатуры строку символов и перевернуть каждое четное слово в строке.
- кто может сделать прогу в C++ которая поменяет местами в каждом столбце минимальный и максимальные элементы в матрице??
- Даны 2 матрицы 2х3. Нужно поменять местами наибольшее значение из 1 с наименьшим из 2. На C++
- замена слов в строке в СИ
- Как заменить слово в строке?Паскаль
- замена слов в строках С++