Advertisement
LilChicha174

Untitled

Dec 16th, 2021
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. # define STEP 2
  6. # define STOP "Dragon flew away!"
  7. # define TAB 33 // номер в таблице ASCII, после которого не идут символы табуляции
  8.  
  9. // проверка на конец предложения
  10. int sent_end(char sym) {
  11.     if (sym == '.' || sym == ';' || sym == '?' || sym == '!')
  12.         return 0;
  13.     return 1;
  14. }
  15.  
  16. // проверка на конец текста
  17. int text_end(char *sent) {
  18.     char *stop = STOP;
  19.     if (strcmp(stop, sent) == 0) {
  20.         return 1;
  21.     }
  22.     return 0;
  23. }
  24.  
  25. // считывание предложения
  26. char *get_sent() {
  27.     int i = 0;
  28.     int size = STEP * sizeof(char);
  29.     char *sent = malloc(size);
  30.     char sym;
  31.     int flag = 0; // табуляция в начале предложения(буквы ещё не встретились)
  32.     do {
  33.         sym = getchar();
  34.         if (flag == 0 && sym >= TAB) {
  35.             flag = 1;
  36.         }
  37.         if (flag == 1) {
  38.             sent[i] = sym;
  39.             i++;
  40.             size += STEP * sizeof(char);
  41.             sent = realloc(sent, size);
  42.         }
  43.     } while (sent_end(sym));
  44.     sent[i] = '\0';
  45.     return sent;
  46. }
  47.  
  48. // запись в память текста
  49. char **get_text() {
  50.     int size = STEP * sizeof(char *);
  51.     char **text = malloc(size);
  52.     char *sentence;
  53.     int i = 0;
  54.     do {
  55.         sentence = get_sent();
  56.         text[i] = sentence;
  57.         i++;
  58.         size += STEP * sizeof(char *);
  59.         text = realloc(text, size);
  60.     } while (text_end(sentence) == 0);
  61.     return text;
  62. }
  63.  
  64. // определение длины предложения
  65. int text_len(char **text) {
  66.     int len = 0;
  67.     while (text_end(text[len]) == 0)
  68.         len++;
  69.     len++;
  70.     return len;
  71. }
  72.  
  73. // вывод последнего предложения
  74. void summary(int m, int n) {
  75.     printf("Количество предложений до %d и количество предложений после %d", n, n - m);
  76. }
  77.  
  78. int main() {
  79.     char **text = get_text();
  80.     int i = 0, m = 0;
  81.     char *fr;
  82.     // выводим текст
  83.     while (text_end(text[i]) == 0) {
  84.         unsigned long last = strlen(text[i]) - 1;
  85.         if (text[i][last] != '?')
  86.             printf("%s\n", text[i]);
  87.         else
  88.             m++;
  89.         i++;
  90.     }
  91.     printf("%s\n", text[i]);
  92.     int n = text_len(text) - 1;
  93.     summary(m, n);
  94.     // очищаем память
  95.     for (int i = 0; i <= n; i++)
  96.         free(text[i]);
  97.     free(text);
  98.     return 0;
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement