C/C++

Программирование C++. Задание на строки и символы

Объясните как работает программа:
#include <iostream>

#include <string>

using namespace std;

int main() {

system("chcp 1251 > null");

int i, k, a = 0, dl = 0;

char s[100];

cout << "Введите текст:\n";

cin.getline(s, 100);

dl= strlen(s);

for (i = dl; i >= 0; i--) {

if (s[i] == ' ') {

for (k = i + 1; k <= (i + a); k++) {

cout << s[k];

}

a = 0;

cout << " ";

}

a++;

}

for (int i = 0; i < dl; i++) {

if (s[i] == ' ') break;

cout << s[i];

}

system("pause > null");

return 0;

}
Задача программы: это инвертирование строки основываясь на пробелах.
Ввод: 123 456 789
Вывод: 789 456 123

1. Переводим консоль на 1251 страницу и очищаем (system("chcp 1251 > null");).
2. Создаём целочисленные i, k, a = 0 и dl = 0.
3. Создаём массив из символов, который будет строкой.
4. Вводим текст через метод getline (он принимает пробелы).
5. В dl мы записываем длину получившейся строки.
6. Создаём в цикл начинающийся с конца строки и проверяем, является ли элемент этой строки пробелом. Если да, то начиная от следующего элемента и до i+a выводим в консоль. Затем зануляем переменную a и выводим пробел. При каждой итерации главный цикл, который проходит всю строку, прибавляет к значению a единицу.
7. Создаём новый цикл, который, проверяет каждый символ. Если этот символ пробел, то он останавливает программу. Иначе просто выводит значения до пробела.
АИ
Александр Ивченко
1 347
Лучший ответ
Вводится предложение в строку s.
Начинается перебор символов с конца предложения.
Если найден не пробел - то отсчитывается счетчик a
Если найден пробел - то выводятся символы правее пробела количеством а (тоесть длиной слова), после чего счет а обнуляется и перебор идет дальше.
В конце отдельным циклом выводится первое слово (до первого пробела).

В итоге выводятся слова в обратном порядке.

В программе есть ошибки. К примеру выводится два пробела вместо одного. Чтобы исправить - достаточно перед a++ добавить else.
Так же можно обойтись без последнего цикла, если модифицировать проверки:
if (s[i] == ' ' || i == 0)
for (k = i?i+1:i; k <= (i + a); k++)
cout << (i?" ":"")
последнее чтобы в конце не печатался лишний пробел
Р Т
Р Т
51 416