Задача: Записать каждое слово предложения в обратном порядке (инвертировать слово)

Задачи Олимпиады для языка C

Задача 16: Ввести с клавиатуры заканчивающееся точкой предложение, слова в котором отделены друг от друга пробелами. Записать каждое слово предложения в обратном порядке (инвертировать слово) и напечатать полученное предложение. Для простоты реализации ограничим длину вводимого предложения 80 символами.

Решение с использованием языка CPP.

Листинг основной файл:

#include <iostream>
using namespace std;
// Файлйл написанный самостоятельно, содержащий 
// функцию соединения строк и 
// функцию инвертирования строк.ы
#include "mystring.h" 
 
void main()
{
   char slovo[81], sp[81], c = ' ', *ptr = slovo;
 
   sp[0] = '\0'; // Очистка массива для нового предложения.
 
   cout << "Enter string with point of the end:\n";
   do
   { 
      cin >> slovo ; // Читается слово из входного потока.
      invert(slovo); // Инвертировать слово.
      c = slovo[0];
 
      // Убрать точку в начале последнего слова.
      if (c == '.')
		  ptr = &slovo[1];
 
      if (sp[0] != '\0')
           conc(sp," \0"); // Пробел перед словом.
      conc(sp,ptr);        // Добавить слово в предложение.
 
    }while (c != '.');    // Конец цикла чтения.
 
   conc(sp,".\0");         // Точка o конце предложения.
   cout << "\n" << sp;     // Вывод результата.
}

Заголовочный файл mystring.h:

void invert (char *e)
{
   char s;
   for (int m=0;e[m]!='\0';m++);
   for (int i=0,j=m-1;i < j;i++,j--)
   { 
	   s = e[i];
	   e[i] = e[j];
	   e[j] = s; 
   }
}

void conc (char *c1, char *c2)
{
   for (int m=0;c1[m]!='\0';m++);
   // m - длина первой строки.
   for (int i=0; c2[i]!='\0';i++)
      c1[m+i]=c2[i];
   c1[m+i] = '\0';
}

Комментарий к коду.

В программе в символьный массив slovo считывается из входного потока (с клавиатуры) очередное слово. sp - формируемое предложение, в конец которого всегда добавляется точка. Переменная char c - первый символ каждого инвертированного слова. Для последнего слова предложения этот символ равен точке. При добавлении этого слова к новому предложению точка отбрасывается с помощью изменения значения указателя ptr. Использованы директивы #include, включающие в программу средства ввода/вывода и тексты функций инвертирования строки invert() и конкатенации строк conc(). Обратите внимание, что длина массива - первого из параметров функции conc() должна быть достаточно велика, чтобы разместить результирующую строку. Препроцессор добавляет тексты всех функций в программу из файла mystring.h и как единое целое передает на компиляцию.

  • Крупнейшая в Европе школа английского языка

    Промокоды, акции и подарки, чтобы Ваше обучение было не только интересным, но и выгодным. Закажите пробный урок уже сейчас!

    skyeng.ru
  • Английский для IT‑специалистов по Skype

    Персональные занятия по разумным ценам. Длительность курса: 50 уроков по 50 минут. Управляй расписанием занятий через мобильное приложение!

    englex.ru