Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.29 KB | None | 0 0
  1. #include<string.h>
  2. #include<stdlib.h>
  3. #include<stdio.h>
  4. #include<ctype.h>
  5.  
  6. #define RED "\033[41m"
  7. #define GREEN "\033[42m"
  8. #define NONE "\033[0m"
  9.  
  10. void time(char **text, int i){
  11.     for(int t = 0; t < i; t++){
  12.         int k = 0;
  13.         do{
  14.             if(text[t][k] == '.' || text[t][k] == ';' || text[t][k] == '!' || text[t][k] == '?')
  15.                 break;
  16.  
  17.             if( isdigit(text[t][k]) && isdigit(text[t][k-1]) && isspace(text[t][k-2])
  18.                 && isalpha(text[t][k-3]) && isalpha(text[t][k-4]) && isalpha(text[t][k-5]) &&
  19.                 isspace(text[t][k-6]) && isdigit(text[t][k-7]) && isdigit(text[t][k-8]) &&
  20.                 isdigit(text[t][k-9]) && isdigit(text[t][k-10]) ){
  21.                 int days;
  22.                 int month_num;
  23.                 int visokos;
  24.                 int days_in_monthes[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  25.                 char month[4];
  26.                 month[0] = text[t][k-5]; month[1] = text[t][k-4]; month[2] = text[t][k-3]; month[3] = '\0';
  27.                 char monthlist[12][4];
  28.                 monthlist[0][0] = 'J'; monthlist[0][1] = 'a'; monthlist[0][2] = 'n'; monthlist[0][3] = '\0';
  29.                 monthlist[1][0] = 'F'; monthlist[1][1] = 'e'; monthlist[1][2] = 'b'; monthlist[1][3] = '\0';
  30.                 monthlist[2][0] = 'M'; monthlist[2][1] = 'a'; monthlist[2][2] = 'r'; monthlist[2][3] = '\0';
  31.                 monthlist[3][0] = 'A'; monthlist[3][1] = 'p'; monthlist[3][2] = 'r'; monthlist[3][3] = '\0';
  32.                 monthlist[4][0] = 'M'; monthlist[4][1] = 'a'; monthlist[4][2] = 'y'; monthlist[4][3] = '\0';
  33.                 monthlist[5][0] = 'J'; monthlist[5][1] = 'u'; monthlist[5][2] = 'n'; monthlist[5][3] = '\0';
  34.                 monthlist[6][0] = 'J'; monthlist[6][1] = 'u'; monthlist[6][2] = 'l'; monthlist[6][3] = '\0';
  35.                 monthlist[7][0] = 'A'; monthlist[7][1] = 'u'; monthlist[7][2] = 'g'; monthlist[7][3] = '\0';
  36.                 monthlist[8][0] = 'S'; monthlist[8][1] = 'e'; monthlist[8][2] = 'p'; monthlist[8][3] = '\0';
  37.                 monthlist[9][0] = 'O'; monthlist[9][1] = 'c'; monthlist[9][2] = 't'; monthlist[9][3] = '\0';
  38.                 monthlist[10][0] = 'N'; monthlist[10][1] = 'o'; monthlist[10][2] = 'v'; monthlist[10][3] = '\0';
  39.                 monthlist[11][0] = 'D'; monthlist[11][1] = 'e'; monthlist[11][2] = 'c'; monthlist[11][3] = '\0';
  40.  
  41.                 int n1 = text[t][k-8] - 48;
  42.                 int n2 = text[t][k-7] - 48;
  43.                 int year = 10*n1 + n2;
  44.  
  45.                 if(year%4 == 0)
  46.                     days_in_monthes[1] += 1;
  47.  
  48.                 for(int y = 0; y < 12; y++){
  49.                     if(!strcmp(month, monthlist[y])){
  50.                         days = days_in_monthes[y];
  51.                         month_num = y;
  52.                     }
  53.                 }
  54.  
  55.                 n1 = text[t][k-1] - 48;
  56.                 if(isspace(text[t][k]))
  57.                     n2 = text[t][k] - 48;
  58.                 else
  59.                     n2 = 0;
  60.                 days = days - (10*n1 + n2);
  61.  
  62.                 int days_left = days;
  63.                 for(month_num += 1; month_num < 12; month_num++){
  64.                     days_left += days_in_monthes[month_num];
  65.                 }
  66.                 int hours_left = 24*days_left;
  67.                 int hour_1 = hours_left/1000;
  68.                 int hour_2 = (hours_left - hour_1*1000)/100;
  69.                 int hour_3 = (hours_left - hour_1*1000 - hour_2*100)/10;
  70.                 int hour_4 = hours_left - hour_1*1000 - hour_2*100 - hour_3*10;
  71.  
  72.                 if(hour_1 != 0){
  73.                     text[t][0] = hour_1 + 48;
  74.                     text[t][1] = hour_2 + 48;
  75.                     text[t][2] = hour_3 + 48;
  76.                     text[t][3] = hour_4 + 48;
  77.                     text[t][4] = '\0';
  78.                 }
  79.                 if(hour_1 == 0){
  80.                     if(hour_2 == 0 && hour_3 != 0){
  81.                         text[t][0] = hour_3 + 48;
  82.                         text[t][1] = hour_4 + 48;
  83.                         text[t][2] = '\0';
  84.                     }
  85.                     if(hour_2 != 0){
  86.                         text[t][0] = hour_2 + 48;
  87.                         text[t][1] = hour_3 + 48;
  88.                         text[t][2] = hour_4 + 48;
  89.                         text[t][3] = '\0';
  90.                     }
  91.                     if(hour_3 == 0 && hour_2 == 0){
  92.                         text[t][0] = hour_4 + 48;
  93.                         text[t][1] = '\0';
  94.                     }
  95.                 }
  96.             }
  97.             k++;
  98.         }while(1);
  99.     }
  100. }
  101.  
  102.  
  103. void colored(char **text, int i){
  104.  
  105.     for(int t = 0; t < i; t++){
  106.         int k = 0;
  107.         int num = 1;
  108.  
  109.         if(text[t][0] == '\0')
  110.             continue;
  111.  
  112.         while(1){
  113.  
  114.             if(text[t][k] == '.' || text[t][k] == ';' || text[t][k] == '?' || text[t][k] == '!' || text[t][k] == ',' || text[t][k] == ':'){
  115.                 printf("%s%c", NONE, text[t][k]);
  116.                 break;
  117.             }
  118.  
  119.             if( isspace(text[t][k]) ){
  120.                 printf("%s ", NONE);
  121.                 num++;
  122.                 k++;
  123.                 continue;
  124.             }
  125.  
  126.             if(num%2 == 0)
  127.                 printf("%s%c", RED, text[t][k]);
  128.             else
  129.                 printf("%s%c", GREEN, text[t][k]);
  130.  
  131.             k++;
  132.         }
  133.         printf("%s ", NONE);
  134.     }
  135.     printf("%s\n", NONE);
  136. }
  137.  
  138.  
  139. void delete(char **text, int i){
  140.  
  141.     for(int t = 0; t < i; t++){
  142.  
  143.         int num = 0;
  144.  
  145.         while(!isspace(text[t][num])){
  146.             num++;
  147.         }
  148.  
  149.         char first[num+1];
  150.         for(int k = 0; k < num; k++)
  151.             first[k] = text[t][k];
  152.         first[num] = '\0';
  153.  
  154.         num = strlen(text[t]) - 1;
  155.         int len_last = 0;
  156.         while(!isspace(text[t][num])){
  157.             len_last++;
  158.             num--;
  159.         }
  160.  
  161.         num++;
  162.         char last[len_last];
  163.         for(int k = 0; k < len_last-1; k++){
  164.             last[k] = text[t][num];
  165.             num++;
  166.         }
  167.         last[len_last-1] = '\0';
  168.         if(!strcmp(first, last))
  169.             text[t][0] = '\0';
  170.  
  171.     }
  172. }
  173.  
  174.  
  175. void sort(char** newtext, char **text, int i){
  176.  
  177.     qsort(newtext, i, sizeof(char*), (int (*)(const void *, const  void *)) strcmp);
  178.  
  179.     for(int t = 0; t < i; t++){
  180.         for(int y = 0; y < i; y++){
  181.             int k = 0;
  182.             int num = 0;
  183.             while(newtext[t][k] != '\0'){
  184.                 if(newtext[t][k] == text[y][k])
  185.                     num++;
  186.                 k++;
  187.             }
  188.  
  189.             if(num == strlen(newtext[t]))
  190.                 printf("%s ", text[y]);
  191.  
  192.         }
  193.     }
  194.    
  195.     printf("\n");
  196. }
  197.  
  198.  
  199. void delete_dublicates(char** text, int i){
  200.  
  201.     for(int t = 0; t < i; t++){
  202.         int len = strlen(text[t]);
  203.         for(int m = 0; m < i; m++){
  204.  
  205.             if(m == t)
  206.                 continue;
  207.  
  208.             if(strlen(text[t]) != strlen(text[m]))
  209.                 continue;
  210.  
  211.             int count = 0;
  212.  
  213.             for(int k = 0; k < len; k++){
  214.  
  215.                 int sym1 = text[t][k];
  216.                 int sym2 = text[t][k];
  217.                
  218.                 if(sym1 == sym2 || abs(sym1 - sym2) == 32){
  219.                     count += 1;
  220.                 }
  221.             }
  222.  
  223.             if(count == len)
  224.                 text[m][0] = '\0';
  225.         }
  226.     }
  227. }
  228.  
  229. void output(char **text, int i){
  230.     for(int h = 0; h < i; h++){
  231.         if(text[h][0] != '\0')
  232.             printf("%s ", text[h]);
  233.     }
  234.     printf("\n");
  235. }
  236.  
  237. int main(){
  238.  
  239.     int len_text = 1;
  240.     int len_sen = 3;
  241.     int i=0;
  242.     int j=0;
  243.     char c;
  244.     int q;
  245.     char** text = calloc(len_text, sizeof(char*));
  246.     text[i] = (char*) calloc(len_sen, sizeof(char));
  247.  
  248.     do{
  249.         c = getchar();
  250.         if( (c == '\t') || (c == ' ' && j == 0) )
  251.             continue;
  252.  
  253.         if(c == '.' || c == '?' || c == ';' || c == '!'){
  254.             len_text+=1;
  255.             text = realloc(text, sizeof(char*)*(len_text));
  256.             text[i][j] = c;
  257.             text[i][j+1] = '\0';
  258.             text[i+1] = (char*) calloc(3, sizeof(char));
  259.             i++;
  260.             j=0;
  261.             len_sen = 3;
  262.             continue;
  263.         } else
  264.             text[i][j] = c;
  265.  
  266.         if(j >= len_sen-3){
  267.             len_sen+=3;
  268.             text[i] = realloc(text[i], (len_sen)*sizeof(char));
  269.         }
  270.         j++;
  271.     }while(c != '\n');
  272.  
  273.     delete_dublicates(text, i);
  274.  
  275.     char** newtext = calloc((i-1), sizeof(char*));
  276.     for(int h = 0; h < i; h++){
  277.         newtext[h] = (char*) calloc(strlen(text[h]), sizeof(char));
  278.         strcpy(newtext[h], text[h]);
  279.     }
  280.  
  281.     char* istr;
  282.     char sep[10] = ", !;?.:";
  283.     for(int h = 0; h < i; h++){
  284.         if(istr == NULL)
  285.             break;
  286.         istr = strtok(newtext[h], sep);
  287.     }
  288.  
  289.     printf("Выберите одно из действий:\n\n1) Найти в предложениях все даты записанные в виде “<год> <месяц> <day>” (“1886 Jun 03”) и заменить их на строку показывающую сколько осталось часов до конца года.\n2) Вывести все строки выделив слова на четных позициях красным цветом, а на нечетных зеленым.\n3) Удалить все предложения, которые начинаются и заканчиваются на одно и то же слово.\n4) Отсортировать предложения по увеличению сумме кодов символов первого слова в предложении.\n\nДля выбора действия введите цифру, которая соответствует номеру действия (1, 2, 3 или 4)\nДля выхода из программы введите 5.\n");
  290.  
  291.     scanf("%d", &q);
  292.     switch(q){
  293.         case 1:
  294.             time(text, i);
  295.             break;
  296.         case 2:
  297.             colored(text, i);
  298.             return 0;
  299.         case 3:
  300.             delete(text, i);
  301.             break;
  302.         case 4:
  303.             sort(newtext, text, i);
  304.             return 0;
  305.         case 5:
  306.             return 0;
  307.         default:
  308.             printf("Данные некорректны\n");
  309.     }
  310.  
  311.     output(text, i);
  312.  
  313.     for(int s = 0; s < i; s++)
  314.         free(text[s]);
  315.  
  316.     return 0;
  317. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement