Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6.  
  7. #define TODAY "03/2019"
  8. #define XIX "/18"
  9.  
  10. char **input(int* len);
  11. char comparison_step_1(char* sen1, char* sen2);
  12. char comparison_step_2(char* sen1, char* sen2);
  13. char del_sen(char ***text, int k2, int* len);
  14. char find_and_print(char **text,int len);
  15. char find_and_del(char ***text,int* len);
  16. char sen(char* sen);
  17. int date(char *date_str);
  18. int day_time(char* day);
  19. int year_time(char* year);
  20. int month_time(char* month);
  21. char* min_in_sen(char* sen);
  22. char* max_in_sen(char* sen);
  23. char** make_arr_of_min(char ***text, int *len);
  24. char** make_arr_of_max(char ***text, int *len);
  25. char comparison(char*** text, int* len);
  26. char print(char** text, int len);
  27.  
  28.  
  29.  
  30. int main()
  31. {
  32.  
  33. int len=0;
  34. printf("Введите текст:\n");
  35.  
  36. //Ввод текста
  37. char **text=input(&len);
  38.  
  39. //Проверка на повторение
  40. for(int k1=0;k1<len-1;k1++)
  41. for(int k2=k1+1;k2<len;k2++)
  42. if(comparison_step_1(text[k1],text[k2])=='T')
  43. {
  44. del_sen(&text,k2,&len);
  45. k2--;
  46. }
  47.  
  48. //ввод и работа с введенным значением(пункт меню)
  49. char paragraph;
  50. while("true")
  51. {
  52. system("clear");
  53.  
  54. //Вывод меню
  55. printf("\nВыберите нужный вам пункт:\n");
  56. printf("1. Вывести все предложения в которых есть дата с текущим годом и месяцем. \n");
  57. printf("2. Отсортировать предложения по увеличению минимальной даты в них.\n");
  58. printf("3. Удалить все предложения в которых все даты относятся к 19 веку.\n");
  59. printf("4. Для каждого предложения вывести самую раннюю и позднюю дату.\n");
  60. printf("5. Вывести текст.\n");
  61. printf("6. Выход из программы.\n\n");
  62.  
  63. printf("Ваш выбор: ");
  64. scanf("%c",&paragraph);
  65.  
  66. system("clear");
  67.  
  68. printf("Выбран пункт: %c\n",paragraph);
  69. switch(paragraph)
  70. {
  71. case '1':
  72. {
  73. char* back=(char*)malloc(4*sizeof(char));
  74. while(strcmp(back,"yes") && strcmp(back,"Yes"))
  75. {
  76. printf("Задание: Вывести все предложения в которых есть дата с текущим годом и месяцем. \n");
  77.  
  78. find_and_print(text,len);
  79.  
  80. printf("\n\nВернуться к меню? (Yes/No)\n");
  81. gets(back);
  82. system("clear");
  83. }
  84. break;
  85. }
  86.  
  87. case '2':
  88. {
  89. char* back=(char*)malloc(4*sizeof(char));
  90. while(strcmp(back,"yes") && strcmp(back,"Yes"))
  91. {
  92.  
  93. printf("Задание: Отсортировать предложения по увеличению минимальной даты в них. \n");
  94.  
  95. comparison(&text,&len);
  96.  
  97. print(text,len);
  98.  
  99. printf("\n\nВернуться к меню? (Yes/No)\n");
  100. gets(back);
  101. back[sizeof(back)]='\0';
  102. system("clear");
  103.  
  104. }
  105. break;
  106. }
  107.  
  108.  
  109. case '3':
  110. {
  111. char* back=(char*)malloc(4*sizeof(char));
  112. while(strcmp(back,"yes") && strcmp(back,"Yes"))
  113. {
  114.  
  115. printf("Задание: Удалить все предложения в которых все даты относятся к 19 веку. \n");
  116.  
  117. find_and_del(&text,&len);
  118. print(text,len);
  119.  
  120. printf("\n\nВернуться к меню? (Yes/No)\n");
  121. gets(back);
  122. system("clear");
  123.  
  124. }
  125. break;
  126. }
  127.  
  128.  
  129. case '4':
  130. {
  131. char* back=(char*)malloc(4*sizeof(char));
  132. while(strcmp(back,"yes") && strcmp(back,"Yes"))
  133. {
  134.  
  135. printf("Задание: Для каждого предложения вывести самую раннюю и позднюю дату. \n");
  136.  
  137. char **max=make_arr_of_max(&text,&len);
  138. char **min=make_arr_of_min(&text,&len);
  139.  
  140. for(int i =0;i<len;i++)
  141. printf("MAX**%s**___MIN**%s**\n",max[i],min[i]);
  142.  
  143. printf("\n\nВернуться к меню? (Yes/No)\n");
  144. gets(back);
  145. system("clear");
  146.  
  147. }
  148.  
  149. break;
  150. }
  151.  
  152.  
  153. case '5':
  154. {
  155. char* back=(char*)malloc(4*sizeof(char));
  156. while(strcmp(back,"yes") && strcmp(back,"Yes"))
  157. {
  158. printf("Задание: Вывести текст. \n");
  159.  
  160. print(text,len);
  161.  
  162. printf("\n\nВернуться к меню? (Yes/No)\n");
  163. gets(back);
  164. system("clear");
  165.  
  166. }
  167. break;
  168. }
  169.  
  170.  
  171. case '6':
  172. {
  173. printf("\nВыход из программы.\n\n");
  174. return 0;
  175. break;
  176. }
  177.  
  178.  
  179. default:
  180. break;
  181.  
  182. }
  183.  
  184. }
  185.  
  186. return 0;
  187. }
  188.  
  189.  
  190.  
  191. char **input(int *len)
  192. {
  193. char **text=(char**)malloc(sizeof(char*));
  194. int is, iw;
  195. char simv;
  196.  
  197. for(is=0;;is++)
  198. {
  199. text[is]=(char*)malloc(sizeof(char));
  200.  
  201.  
  202. for(iw=0;;iw++)
  203. {
  204.  
  205. text[is]=(char*)realloc(text[is],(iw+2)*sizeof(char));
  206. scanf("%c", &simv);
  207.  
  208. if(simv=='\n')
  209. {
  210. *len=is;
  211. return text;
  212. }
  213. else
  214.  
  215. if(!(iw==0 && simv==' '))
  216. {
  217.  
  218. text[is][iw]=simv;
  219. }
  220. else
  221. iw--;
  222.  
  223. if(simv=='.')
  224. {
  225. text[is][iw+1]='\0';
  226. break;
  227. }
  228.  
  229. }
  230. text=(char**)realloc(text,(is+2)*sizeof(char*));
  231.  
  232. }
  233. }
  234.  
  235.  
  236. char comparison_step_1(char* sen1, char* sen2)
  237. {
  238.  
  239. if(strlen(sen1)==strlen(sen2))
  240. return comparison_step_2(sen1,sen2);
  241. else
  242. return 'F';
  243. }
  244.  
  245.  
  246. char comparison_step_2(char* sen1, char* sen2)
  247. {
  248.  
  249. for(int i =0;i<strlen(sen1);i++)
  250. if(sen1[i]!=sen2[i])
  251. return 'F';
  252. return 'T';
  253. }
  254.  
  255.  
  256. char del_sen(char ***text, int k2,int* len)
  257. {
  258. char** tt=*text;
  259.  
  260. for(int i=k2+1;i<(*len);i++)
  261. {
  262.  
  263. tt[i-1]=(char*)realloc(tt[i-1],(strlen(tt[i])+1));
  264.  
  265. strcpy(tt[i-1],tt[i]);
  266. }
  267. (*len)--;
  268. return 'T';
  269.  
  270. }
  271.  
  272.  
  273. char find_and_print(char **text,int len)
  274. {
  275. for(int i=0;i<len;i++)
  276. {
  277. if(strstr(text[i],TODAY)!=NULL)
  278. {
  279. for(int j =0;;j++)
  280. {
  281. if(text[i][j]=='\0')
  282. break;
  283. printf("%c",text[i][j]);
  284. }
  285. }
  286. }
  287. return 'T';
  288.  
  289. }
  290.  
  291.  
  292. char find_and_del(char ***text,int* len)
  293. {
  294. for(int k=0;k<(*len);k++)
  295. if(sen((*text)[k])=='T')
  296. del_sen(text,k,len);
  297. return 'T';
  298. }
  299.  
  300.  
  301. char sen(char* sen)
  302. {
  303. char *sen_help=(char*)malloc(12*sizeof(char));
  304. for(int i=0;i<strlen(sen)-10;i=i+11)
  305. {
  306. strncpy(sen_help,sen+i,10);
  307. if(strstr(sen_help,XIX)==NULL)
  308. return 'F';
  309. }
  310. return 'T';
  311. }
  312.  
  313.  
  314. int date(char *date_str)
  315. {
  316. char* year=(char*)malloc(4*sizeof(char*));
  317. strncpy(year,date_str+6,4);
  318.  
  319. char* month=(char*)malloc(2*sizeof(char*));
  320. strncpy(month,date_str+3,2);
  321.  
  322. char* day=(char*)malloc(2*sizeof(char*));
  323. strncpy(day,date_str,2);
  324.  
  325. return day_time(day)+month_time(month)+year_time(year);
  326.  
  327. }
  328.  
  329. int day_time(char* day)
  330. {
  331.  
  332. return ((((int)day[0]-48)*10)+(int)day[1]-48);
  333. }
  334.  
  335. int month_time(char* month)
  336. {
  337.  
  338. return ((((int)month[0]-48)*10)+(int)month[1]-48)*100;
  339. }
  340.  
  341.  
  342. int year_time(char* year)
  343. {
  344.  
  345. return ((((((int)year[0]-48)*10)+(int)year[1]-48)*10+(int)year[2]-48)*10+(int)year[3]-48)*10000;
  346. }
  347.  
  348.  
  349. char* min_in_sen(char* sen)
  350. {
  351. char* min=(char*)malloc(11*sizeof(char));
  352. strncpy(min, sen,10);
  353. char* str=(char*)malloc(11*sizeof(char));
  354.  
  355. for(int i=11;i<strlen(sen)-1;i=i+11)
  356. {
  357. strncpy(str, sen+i,10);
  358. if(date(min)>date(str))
  359. strcpy(min,str);
  360. }
  361. return min;
  362. }
  363.  
  364.  
  365. char **make_arr_of_min(char ***text, int *len)
  366. {
  367. char **arr_of_min=(char**)malloc((*len)*sizeof(char*));
  368. char *index=(char*)malloc((*len)*sizeof(char));
  369. for(int k=0;k<(*len);k++)
  370. {
  371. arr_of_min[k]=(char*)malloc(11*sizeof(char));
  372. if(strlen((*text)[k])<=12)
  373. strncpy(arr_of_min[k],(*text)[k],10);
  374. else
  375. arr_of_min[k]= min_in_sen((*text)[k]);
  376.  
  377. }
  378.  
  379.  
  380. return arr_of_min;
  381. }
  382.  
  383.  
  384. char comparison(char*** text, int* len)
  385. {
  386. char** arr_of_min=make_arr_of_min(text,len);
  387. for(int k=0;k<(*len)-1;k++)
  388. {
  389. for(int i=k;i<(*len);i++)
  390. {
  391. if(date(arr_of_min[k])>date(arr_of_min[i]))
  392. {
  393. char* buffer_for_min=arr_of_min[k];
  394. arr_of_min[k]=arr_of_min[i];
  395. arr_of_min[i]=buffer_for_min;
  396.  
  397. char* buffer_for_sen=(*text)[k];
  398. (*text)[k]=(*text)[i];
  399. (*text)[i]=buffer_for_sen;
  400.  
  401. }
  402. }
  403. }
  404. return 'T';
  405. }
  406.  
  407.  
  408. char **make_arr_of_max(char ***text, int *len)
  409. {
  410. char **arr_of_max=(char**)malloc((*len)*sizeof(char*));
  411. char *index=(char*)malloc((*len)*sizeof(char));
  412. for(int k=0;k<(*len);k++)
  413. {
  414. arr_of_max[k]=(char*)malloc(11*sizeof(char));
  415. if(strlen((*text)[k])<=12)
  416. strncpy(arr_of_max[k],(*text)[k],10);
  417. else
  418. arr_of_max[k]= max_in_sen((*text)[k]);
  419.  
  420. }
  421.  
  422.  
  423. return arr_of_max;
  424. }
  425.  
  426.  
  427. char* max_in_sen(char* sen)
  428. {
  429. char* max=(char*)malloc(11*sizeof(char));
  430. strncpy(max, sen,10);
  431. char* str=(char*)malloc(11*sizeof(char));
  432.  
  433. for(int i=11;i<strlen(sen)-1;i=i+11)
  434. {
  435. strncpy(str, sen+i,10);
  436. if(date(max)<date(str))
  437. strcpy(max,str);
  438. }
  439. return max;
  440. }
  441.  
  442.  
  443. char print(char** text, int len)
  444. {
  445. for(int i =0;i<len;i++)
  446. {
  447. printf("%c",'\n');
  448. for(int j =0;;j++)
  449. {
  450. if(text[i][j]=='\0')
  451. break;
  452. printf("%c",text[i][j]);
  453. }
  454. }
  455. return 'T';
  456. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement