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