Инструменты пользователя

Инструменты сайта


reshenie_zadachi_16

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

reshenie_zadachi_16 [2011/04/08 14:23] (текущий)
Строка 1: Строка 1:
 +====== Задача 16 ======
 +**Задача 16**: Ввести с клавиатуры заканчивающееся точкой предложение,​ слова в котором отделены друг от друга пробелами. Записать каждое слово предложения в обратном порядке (инвертировать слово) и напечатать полученное предложение. Для простоты реализации ограничим длину вводимого предложения 80 символами.
  
 +**Основной файл**:
 +
 +<​file>​
 +#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;     // Вывод результата.
 +}
 +
 +</​file>​
 +**Заголовочный файл mystring.h:​**
 +<​file>​
 +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';​
 +}
 +</​file>​
 +Комментарий к коду.
 +
 +В программе в символьный массив slovo считывается из входного потока (с клавиатуры) очередное слово. sp - формируемое предложение,​ в конец которого всегда добавляется точка. Переменная char c - первый символ каждого инвертированного слова. Для последнего слова предложения этот символ равен точке. При добавлении этого слова к новому предложению точка отбрасывается с помощью изменения значения указателя ptr. Использованы директивы #include, включающие в программу средства ввода/​вывода и тексты функций инвертирования строки invert() и конкатенации строк conc(). Обратите внимание,​ что длина массива - первого из параметров функции conc() должна быть достаточно велика,​ чтобы разместить результирующую строку. Препроцессор добавляет тексты всех функций в программу из файла mystring.h и как единое целое передает на компиляцию.
reshenie_zadachi_16.txt · Последние изменения: 2011/04/08 14:23 (внешнее изменение)