Advertisement
maxim_shlyahtin

lb_3

Oct 24th, 2022 (edited)
772
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.07 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define INIT_SIZE 100
  5. #define DELTA 50
  6.  
  7.  
  8. int str_comp(char const *s1, char const *s2) {
  9.     if (strlen(s1) != strlen(s2))
  10.         return 0;
  11.     else {
  12.         for (int i = 0; i < strlen(s1); i++) {
  13.             if (s1[i] != s2[i])
  14.                 return 0;
  15.         }
  16.     }
  17.     return 1;
  18. }
  19.  
  20. char *readSentence() {
  21.     char c;
  22.     int size = INIT_SIZE;
  23.     int actual_size = 0;
  24.     char *sentence = malloc(size * sizeof(char));
  25.     do {
  26.         if (size == actual_size) {
  27.             size += DELTA;
  28.             sentence = realloc(sentence, size);
  29.         }
  30.         c = (char) getchar();
  31.         sentence[actual_size++] = c;
  32.     } while (c != '.' && c != ';' && c != '?' && c != '!');
  33.     sentence[actual_size] = '\0';
  34.     return sentence;
  35. }
  36.  
  37. char *fix_of_sentence(char *sentence) {
  38.     if (sentence[0] == '\t' || sentence[0] == ' ' || sentence[0] == '\n') {
  39.         for (int i = 0; i <= strlen(sentence); i++)
  40.             sentence[i] = sentence[i + 1];
  41.     }
  42.     return sentence;
  43. }
  44.  
  45. char **readText(int *length) {
  46.     int size = INIT_SIZE;
  47.     int actual_size = 0;
  48.     char *check = "Dragon flew away!";
  49.     char *sentence;
  50.     char **text = malloc(size * sizeof(char *));
  51.     do {
  52.         sentence = readSentence();
  53.         fix_of_sentence(sentence);
  54.         if (size <= actual_size) {
  55.             size += DELTA;
  56.             text = realloc(text, size);
  57.         }
  58.         text[*length] = sentence;
  59.         *length += 1;
  60.         actual_size += (int) strlen(sentence);
  61.     } while (str_comp(sentence, check) == 0);
  62.     return text;
  63. }
  64.  
  65. void print_sentence(char *sentence) {
  66.     for (int i = 0; i < strlen(sentence); i++) {
  67.         if (i != strlen(sentence) - 2 && sentence[i + 1] == '\n' && sentence[i] != ' ') {
  68.             printf("%c ", sentence[i]);
  69.             continue;
  70.         } else if (sentence[i] != '\n')
  71.             printf("%c", sentence[i]);
  72.     }
  73. }
  74.  
  75. void print_txt(char **text, int txt_len) {
  76.     for (int i = 0; i < txt_len; i++) {
  77.         print_sentence(text[i]);
  78.         printf("\n");
  79.     }
  80. }
  81.  
  82. int substr(char *str1, char *str2, int *index) {
  83.     int i;
  84.     int arr_size = 0;
  85.     int *tmp_arr = index;
  86.     for (i = 0; i < strlen(str2);) {
  87.         int step = 0;
  88.         if (str2[i] == str1[0]) {
  89.             for (int j = 0; j < strlen(str1); j++) {
  90.                 if (str2[i + j] == str1[j])
  91.                     step += 1;
  92.             }
  93.         }
  94.         if (step == strlen(str1)) {
  95.             tmp_arr[arr_size] = i;
  96.             arr_size++;
  97.             i += step;
  98.         } else
  99.             i++;
  100.     }
  101.     return arr_size;
  102. }
  103.  
  104. int del_numb(char *sentence, int *index) {
  105.     int arr_size = substr("555", sentence, index);
  106.     if (arr_size != 0) {
  107.         for (int i = 0; i < arr_size; i++) {
  108.             if (sentence[index[i] - 1] == ' ' &&
  109.                 (sentence[index[i] + 3] == ' ' || sentence[index[i] + 3] == ',' || sentence[index[i] + 3] == '.'))
  110.                 return 1;
  111.         }
  112.     } else
  113.         return 0;
  114.     return 0;
  115. }
  116.  
  117.  
  118. char **copy_text(char **prev_text, int prev_len, int *new_len) {
  119.     int index;
  120.     char **new_txt = malloc(prev_len * sizeof(char *));
  121.     for (index = 0; index < prev_len; index++) {
  122.         int *in_index = malloc(INIT_SIZE * sizeof(int));
  123.         int res = del_numb(prev_text[index], in_index);
  124.         if (res == 0) {
  125.             new_txt[*new_len] = prev_text[index];
  126.             ++*new_len;
  127.         } else
  128.             free(prev_text[index]);
  129.         free(in_index);
  130.     }
  131.     return new_txt;
  132. }
  133.  
  134. void free_txt(char **text, int txt_len) {
  135.     for (int i = 0; i < txt_len; i++)
  136.         free(text[i]);
  137.     free(text);
  138. }
  139.  
  140. int main() {
  141.     int txt_len = 0;
  142.     char **text = readText(&txt_len);
  143.     int new_len = 0;
  144.     char **new_txt = copy_text(text, txt_len, &new_len);
  145.     print_txt(new_txt, new_len);
  146.     printf("Количество предложений до %d и количество предложений после %d", txt_len - 1, new_len - 1);
  147.     free_txt(new_txt, new_len);
  148.     return 0;
  149. }
  150.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement