Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.90 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 **text, int i){
  176.  
  177. printf("fds");
  178. }
  179.  
  180.  
  181. void delete_dublicates(char **text, int i){
  182. for(int t = 0; t < i; t++){
  183. int len = strlen(text[t]);
  184. for(int m = 0; m < i; m++){
  185.  
  186. if(m == t)
  187. continue;
  188.  
  189. if(strlen(text[t]) != strlen(text[m]))
  190. continue;
  191.  
  192. int count = 0;
  193.  
  194. for(int k = 0; k < len; k++){
  195. if(text[t][k] == text[m][k]){
  196. count += 1;
  197. }
  198. }
  199.  
  200. if(count == len)
  201. text[m][0] = '\0';
  202. }
  203. }
  204. }
  205.  
  206.  
  207. void output(char **text, int i){
  208. for(int h = 0; h < i; h++){
  209. if(text[h][0] != '\0')
  210. printf("%s ", text[h]);
  211. }
  212. printf("\n");
  213. }
  214.  
  215.  
  216. char** input(){
  217. int len_text = 1;
  218. int len_sen = 3;
  219. int i=0;
  220. int j=0;
  221. char c;
  222. char** text = calloc(len_text, sizeof(char*));
  223. text[i] = (char*) calloc(len_sen, sizeof(char));
  224.  
  225. do{
  226. c = getchar();
  227. if( (c == '\t') || (c == ' ' && j == 0) )
  228. continue;
  229.  
  230. if(c == '.' || c == '?' || c == ';' || c == '!'){
  231. len_text+=1;
  232. text = realloc(text, sizeof(char*)*(len_text));
  233. text[i][j] = c;
  234. text[i][j+1] = '\0';
  235. text[i+1] = (char*) calloc(3, sizeof(char));
  236. i++;
  237. j=0;
  238. len_sen = 3;
  239. continue;
  240. } else
  241. text[i][j] = c;
  242.  
  243. if(j >= len_sen-3){
  244. len_sen+=3;
  245. text[i] = realloc(text[i], (len_sen)*sizeof(char));
  246. }
  247. j++;
  248. }while(c != '\n');
  249.  
  250. return *text;
  251. }
  252.  
  253. int main(){
  254.  
  255. char **text = input();
  256. int i = 0;
  257. int j = 0;
  258. while(text[i][j] != '\n'){
  259. if(text[i][j] == '\0')
  260. i++;
  261. j++;
  262. }
  263.  
  264. delete_dublicates(text, i);
  265.  
  266. char** newtext = calloc((i-1), sizeof(char*));
  267. for(int h = 0; h < i; h++){
  268. newtext[h] = (char*) calloc(strlen(text[h]), sizeof(char));
  269. strcpy(newtext[h], text[h]);
  270. }
  271.  
  272. char* istr;
  273. char sep[10] = ", !;?.:";
  274. for(int h = 0; h < i; h++){
  275. if(istr == NULL)
  276. break;
  277. istr = strtok(newtext[h], sep);
  278. }
  279.  
  280. printf("Выберите одно из действий:\n\n1) Найти в предложениях все даты записанные в виде “<год> <месяц> <day>” (“1886 Jun 03”) и заменить их на строку показывающую сколько осталось часов до конца года.\n2) Вывести все строки выделив слова на четных позициях красным цветом, а на нечетных зеленым.\n3) Удалить все предложения, которые начинаются и заканчиваются на одно и то же слово.\n4) Отсортировать предложения по увеличению сумме кодов символов первого слова в предложении.\n\nДля выбора действия введите цифру, которая соответствует номеру действия (1, 2, 3 или 4)\nДля выхода из программы введите 5.\n");
  281. int q;
  282. scanf("%d", &q);
  283. switch(q){
  284. case 1:
  285. time(text, i);
  286. break;
  287. case 2:
  288. colored(text, i);
  289. return 0;
  290. case 3:
  291. delete(text, i);
  292. break;
  293. case 4:
  294. sort(newtext, i);
  295. break;
  296. case 5:
  297. return 0;
  298. default:
  299. printf("Данные некорректны");
  300. }
  301.  
  302. output(text, i);
  303.  
  304. for(int s = 0; s < i; s++)
  305. free(text[s]);
  306.  
  307. return 0;
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement