Задача 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 и как единое целое передает на компиляцию.