Advertisement
maxim_shlyahtin

lb_3

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