Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #define TODAY "03/2019"
- #define XIX "/18"
- char **input(int* len);
- char comparison_step_1(char* sen1, char* sen2);
- char comparison_step_2(char* sen1, char* sen2);
- char del_sen(char ***text, int k2, int* len);
- char find_and_print(char **text,int len);
- char find_and_del(char ***text,int* len);
- char sen(char* sen);
- int date(char *date_str);
- int day_time(char* day);
- int year_time(char* year);
- int month_time(char* month);
- char* min_in_sen(char* sen);
- char* max_in_sen(char* sen);
- char** make_arr_of_min(char ***text, int *len);
- char** make_arr_of_max(char ***text, int *len);
- char comparison(char*** text, int* len);
- char print(char** text, int len);
- int main()
- {
- int len=0;
- printf("Введите текст:\n");
- //Ввод текста
- char **text=input(&len);
- //Проверка на повторение
- for(int k1=0;k1<len-1;k1++)
- for(int k2=k1+1;k2<len;k2++)
- if(comparison_step_1(text[k1],text[k2])=='T')
- {
- del_sen(&text,k2,&len);
- k2--;
- }
- //ввод и работа с введенным значением(пункт меню)
- char paragraph;
- while("true")
- {
- system("clear");
- //Вывод меню
- printf("\nВыберите нужный вам пункт:\n");
- printf("1. Вывести все предложения в которых есть дата с текущим годом и месяцем. \n");
- printf("2. Отсортировать предложения по увеличению минимальной даты в них.\n");
- printf("3. Удалить все предложения в которых все даты относятся к 19 веку.\n");
- printf("4. Для каждого предложения вывести самую раннюю и позднюю дату.\n");
- printf("5. Вывести текст.\n");
- printf("6. Выход из программы.\n\n");
- printf("Ваш выбор: ");
- scanf("%c",¶graph);
- system("clear");
- printf("Выбран пункт: %c\n",paragraph);
- switch(paragraph)
- {
- case '1':
- {
- char* back=(char*)malloc(4*sizeof(char));
- while(strcmp(back,"yes") && strcmp(back,"Yes"))
- {
- printf("Задание: Вывести все предложения в которых есть дата с текущим годом и месяцем. \n");
- find_and_print(text,len);
- printf("\n\nВернуться к меню? (Yes/No)\n");
- gets(back);
- system("clear");
- }
- break;
- }
- case '2':
- {
- char* back=(char*)malloc(4*sizeof(char));
- while(strcmp(back,"yes") && strcmp(back,"Yes"))
- {
- printf("Задание: Отсортировать предложения по увеличению минимальной даты в них. \n");
- comparison(&text,&len);
- print(text,len);
- printf("\n\nВернуться к меню? (Yes/No)\n");
- gets(back);
- back[sizeof(back)]='\0';
- system("clear");
- }
- break;
- }
- case '3':
- {
- char* back=(char*)malloc(4*sizeof(char));
- while(strcmp(back,"yes") && strcmp(back,"Yes"))
- {
- printf("Задание: Удалить все предложения в которых все даты относятся к 19 веку. \n");
- find_and_del(&text,&len);
- print(text,len);
- printf("\n\nВернуться к меню? (Yes/No)\n");
- gets(back);
- system("clear");
- }
- break;
- }
- case '4':
- {
- char* back=(char*)malloc(4*sizeof(char));
- while(strcmp(back,"yes") && strcmp(back,"Yes"))
- {
- printf("Задание: Для каждого предложения вывести самую раннюю и позднюю дату. \n");
- char **max=make_arr_of_max(&text,&len);
- char **min=make_arr_of_min(&text,&len);
- for(int i =0;i<len;i++)
- printf("MAX**%s**___MIN**%s**\n",max[i],min[i]);
- printf("\n\nВернуться к меню? (Yes/No)\n");
- gets(back);
- system("clear");
- }
- break;
- }
- case '5':
- {
- char* back=(char*)malloc(4*sizeof(char));
- while(strcmp(back,"yes") && strcmp(back,"Yes"))
- {
- printf("Задание: Вывести текст. \n");
- print(text,len);
- printf("\n\nВернуться к меню? (Yes/No)\n");
- gets(back);
- system("clear");
- }
- break;
- }
- case '6':
- {
- printf("\nВыход из программы.\n\n");
- return 0;
- break;
- }
- default:
- break;
- }
- }
- return 0;
- }
- char **input(int *len)
- {
- char **text=(char**)malloc(sizeof(char*));
- int is, iw;
- char simv;
- for(is=0;;is++)
- {
- text[is]=(char*)malloc(sizeof(char));
- for(iw=0;;iw++)
- {
- text[is]=(char*)realloc(text[is],(iw+2)*sizeof(char));
- scanf("%c", &simv);
- if(simv=='\n')
- {
- *len=is;
- return text;
- }
- else
- if(!(iw==0 && simv==' '))
- {
- text[is][iw]=simv;
- }
- else
- iw--;
- if(simv=='.')
- {
- text[is][iw+1]='\0';
- break;
- }
- }
- text=(char**)realloc(text,(is+2)*sizeof(char*));
- }
- }
- char comparison_step_1(char* sen1, char* sen2)
- {
- if(strlen(sen1)==strlen(sen2))
- return comparison_step_2(sen1,sen2);
- else
- return 'F';
- }
- char comparison_step_2(char* sen1, char* sen2)
- {
- for(int i =0;i<strlen(sen1);i++)
- if(sen1[i]!=sen2[i])
- return 'F';
- return 'T';
- }
- char del_sen(char ***text, int k2,int* len)
- {
- char** tt=*text;
- for(int i=k2+1;i<(*len);i++)
- {
- tt[i-1]=(char*)realloc(tt[i-1],(strlen(tt[i])+1));
- strcpy(tt[i-1],tt[i]);
- }
- (*len)--;
- return 'T';
- }
- char find_and_print(char **text,int len)
- {
- for(int i=0;i<len;i++)
- {
- if(strstr(text[i],TODAY)!=NULL)
- {
- for(int j =0;;j++)
- {
- if(text[i][j]=='\0')
- break;
- printf("%c",text[i][j]);
- }
- }
- }
- return 'T';
- }
- char find_and_del(char ***text,int* len)
- {
- for(int k=0;k<(*len);k++)
- if(sen((*text)[k])=='T')
- del_sen(text,k,len);
- return 'T';
- }
- char sen(char* sen)
- {
- char *sen_help=(char*)malloc(12*sizeof(char));
- for(int i=0;i<strlen(sen)-10;i=i+11)
- {
- strncpy(sen_help,sen+i,10);
- if(strstr(sen_help,XIX)==NULL)
- return 'F';
- }
- return 'T';
- }
- int date(char *date_str)
- {
- char* year=(char*)malloc(4*sizeof(char*));
- strncpy(year,date_str+6,4);
- char* month=(char*)malloc(2*sizeof(char*));
- strncpy(month,date_str+3,2);
- char* day=(char*)malloc(2*sizeof(char*));
- strncpy(day,date_str,2);
- return day_time(day)+month_time(month)+year_time(year);
- }
- int day_time(char* day)
- {
- return ((((int)day[0]-48)*10)+(int)day[1]-48);
- }
- int month_time(char* month)
- {
- return ((((int)month[0]-48)*10)+(int)month[1]-48)*100;
- }
- int year_time(char* year)
- {
- return ((((((int)year[0]-48)*10)+(int)year[1]-48)*10+(int)year[2]-48)*10+(int)year[3]-48)*10000;
- }
- char* min_in_sen(char* sen)
- {
- char* min=(char*)malloc(11*sizeof(char));
- strncpy(min, sen,10);
- char* str=(char*)malloc(11*sizeof(char));
- for(int i=11;i<strlen(sen)-1;i=i+11)
- {
- strncpy(str, sen+i,10);
- if(date(min)>date(str))
- strcpy(min,str);
- }
- return min;
- }
- char **make_arr_of_min(char ***text, int *len)
- {
- char **arr_of_min=(char**)malloc((*len)*sizeof(char*));
- char *index=(char*)malloc((*len)*sizeof(char));
- for(int k=0;k<(*len);k++)
- {
- arr_of_min[k]=(char*)malloc(11*sizeof(char));
- if(strlen((*text)[k])<=12)
- strncpy(arr_of_min[k],(*text)[k],10);
- else
- arr_of_min[k]= min_in_sen((*text)[k]);
- }
- return arr_of_min;
- }
- char comparison(char*** text, int* len)
- {
- char** arr_of_min=make_arr_of_min(text,len);
- for(int k=0;k<(*len)-1;k++)
- {
- for(int i=k;i<(*len);i++)
- {
- if(date(arr_of_min[k])>date(arr_of_min[i]))
- {
- char* buffer_for_min=arr_of_min[k];
- arr_of_min[k]=arr_of_min[i];
- arr_of_min[i]=buffer_for_min;
- char* buffer_for_sen=(*text)[k];
- (*text)[k]=(*text)[i];
- (*text)[i]=buffer_for_sen;
- }
- }
- }
- return 'T';
- }
- char **make_arr_of_max(char ***text, int *len)
- {
- char **arr_of_max=(char**)malloc((*len)*sizeof(char*));
- char *index=(char*)malloc((*len)*sizeof(char));
- for(int k=0;k<(*len);k++)
- {
- arr_of_max[k]=(char*)malloc(11*sizeof(char));
- if(strlen((*text)[k])<=12)
- strncpy(arr_of_max[k],(*text)[k],10);
- else
- arr_of_max[k]= max_in_sen((*text)[k]);
- }
- return arr_of_max;
- }
- char* max_in_sen(char* sen)
- {
- char* max=(char*)malloc(11*sizeof(char));
- strncpy(max, sen,10);
- char* str=(char*)malloc(11*sizeof(char));
- for(int i=11;i<strlen(sen)-1;i=i+11)
- {
- strncpy(str, sen+i,10);
- if(date(max)<date(str))
- strcpy(max,str);
- }
- return max;
- }
- char print(char** text, int len)
- {
- for(int i =0;i<len;i++)
- {
- printf("%c",'\n');
- for(int j =0;;j++)
- {
- if(text[i][j]=='\0')
- break;
- printf("%c",text[i][j]);
- }
- }
- return 'T';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement