Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<string.h>
- #include<stdlib.h>
- #include<stdio.h>
- #include<ctype.h>
- #define RED "\033[41m"
- #define GREEN "\033[42m"
- #define NONE "\033[0m"
- void time(char **text, int i){
- for(int t = 0; t < i; t++){
- int k = 0;
- do{
- if(text[t][k] == '.' || text[t][k] == ';' || text[t][k] == '!' || text[t][k] == '?')
- break;
- if( isdigit(text[t][k]) && isdigit(text[t][k-1]) && isspace(text[t][k-2])
- && isalpha(text[t][k-3]) && isalpha(text[t][k-4]) && isalpha(text[t][k-5]) &&
- isspace(text[t][k-6]) && isdigit(text[t][k-7]) && isdigit(text[t][k-8]) &&
- isdigit(text[t][k-9]) && isdigit(text[t][k-10]) ){
- int days;
- int month_num;
- int visokos;
- int days_in_monthes[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- char month[4];
- month[0] = text[t][k-5]; month[1] = text[t][k-4]; month[2] = text[t][k-3]; month[3] = '\0';
- char monthlist[12][4];
- monthlist[0][0] = 'J'; monthlist[0][1] = 'a'; monthlist[0][2] = 'n'; monthlist[0][3] = '\0';
- monthlist[1][0] = 'F'; monthlist[1][1] = 'e'; monthlist[1][2] = 'b'; monthlist[1][3] = '\0';
- monthlist[2][0] = 'M'; monthlist[2][1] = 'a'; monthlist[2][2] = 'r'; monthlist[2][3] = '\0';
- monthlist[3][0] = 'A'; monthlist[3][1] = 'p'; monthlist[3][2] = 'r'; monthlist[3][3] = '\0';
- monthlist[4][0] = 'M'; monthlist[4][1] = 'a'; monthlist[4][2] = 'y'; monthlist[4][3] = '\0';
- monthlist[5][0] = 'J'; monthlist[5][1] = 'u'; monthlist[5][2] = 'n'; monthlist[5][3] = '\0';
- monthlist[6][0] = 'J'; monthlist[6][1] = 'u'; monthlist[6][2] = 'l'; monthlist[6][3] = '\0';
- monthlist[7][0] = 'A'; monthlist[7][1] = 'u'; monthlist[7][2] = 'g'; monthlist[7][3] = '\0';
- monthlist[8][0] = 'S'; monthlist[8][1] = 'e'; monthlist[8][2] = 'p'; monthlist[8][3] = '\0';
- monthlist[9][0] = 'O'; monthlist[9][1] = 'c'; monthlist[9][2] = 't'; monthlist[9][3] = '\0';
- monthlist[10][0] = 'N'; monthlist[10][1] = 'o'; monthlist[10][2] = 'v'; monthlist[10][3] = '\0';
- monthlist[11][0] = 'D'; monthlist[11][1] = 'e'; monthlist[11][2] = 'c'; monthlist[11][3] = '\0';
- int n1 = text[t][k-8] - 48;
- int n2 = text[t][k-7] - 48;
- int year = 10*n1 + n2;
- if(year%4 == 0)
- days_in_monthes[1] += 1;
- for(int y = 0; y < 12; y++){
- if(!strcmp(month, monthlist[y])){
- days = days_in_monthes[y];
- month_num = y;
- }
- }
- n1 = text[t][k-1] - 48;
- if(isspace(text[t][k]))
- n2 = text[t][k] - 48;
- else
- n2 = 0;
- days = days - (10*n1 + n2);
- int days_left = days;
- for(month_num += 1; month_num < 12; month_num++){
- days_left += days_in_monthes[month_num];
- }
- int hours_left = 24*days_left;
- int hour_1 = hours_left/1000;
- int hour_2 = (hours_left - hour_1*1000)/100;
- int hour_3 = (hours_left - hour_1*1000 - hour_2*100)/10;
- int hour_4 = hours_left - hour_1*1000 - hour_2*100 - hour_3*10;
- if(hour_1 != 0){
- text[t][0] = hour_1 + 48;
- text[t][1] = hour_2 + 48;
- text[t][2] = hour_3 + 48;
- text[t][3] = hour_4 + 48;
- text[t][4] = '\0';
- }
- if(hour_1 == 0){
- if(hour_2 == 0 && hour_3 != 0){
- text[t][0] = hour_3 + 48;
- text[t][1] = hour_4 + 48;
- text[t][2] = '\0';
- }
- if(hour_2 != 0){
- text[t][0] = hour_2 + 48;
- text[t][1] = hour_3 + 48;
- text[t][2] = hour_4 + 48;
- text[t][3] = '\0';
- }
- if(hour_3 == 0 && hour_2 == 0){
- text[t][0] = hour_4 + 48;
- text[t][1] = '\0';
- }
- }
- }
- k++;
- }while(1);
- }
- }
- void colored(char **text, int i){
- for(int t = 0; t < i; t++){
- int k = 0;
- int num = 1;
- if(text[t][0] == '\0')
- continue;
- while(1){
- if(text[t][k] == '.' || text[t][k] == ';' || text[t][k] == '?' || text[t][k] == '!' || text[t][k] == ',' || text[t][k] == ':'){
- printf("%s%c", NONE, text[t][k]);
- break;
- }
- if( isspace(text[t][k]) ){
- printf("%s ", NONE);
- num++;
- k++;
- continue;
- }
- if(num%2 == 0)
- printf("%s%c", RED, text[t][k]);
- else
- printf("%s%c", GREEN, text[t][k]);
- k++;
- }
- printf("%s ", NONE);
- }
- printf("%s\n", NONE);
- }
- void delete(char **text, int i){
- for(int t = 0; t < i; t++){
- int num = 0;
- while(!isspace(text[t][num])){
- num++;
- }
- char first[num+1];
- for(int k = 0; k < num; k++)
- first[k] = text[t][k];
- first[num] = '\0';
- num = strlen(text[t]) - 1;
- int len_last = 0;
- while(!isspace(text[t][num])){
- len_last++;
- num--;
- }
- num++;
- char last[len_last];
- for(int k = 0; k < len_last-1; k++){
- last[k] = text[t][num];
- num++;
- }
- last[len_last-1] = '\0';
- if(!strcmp(first, last))
- text[t][0] = '\0';
- }
- }
- void sort(char** newtext, char **text, int i){
- qsort(newtext, i, sizeof(char*), (int (*)(const void *, const void *)) strcmp);
- for(int t = 0; t < i; t++){
- for(int y = 0; y < i; y++){
- int k = 0;
- int num = 0;
- while(newtext[t][k] != '\0'){
- if(newtext[t][k] == text[y][k])
- num++;
- k++;
- }
- if(num == strlen(newtext[t]))
- printf("%s ", text[y]);
- }
- }
- printf("\n");
- }
- void delete_dublicates(char** text, int i){
- for(int t = 0; t < i; t++){
- int len = strlen(text[t]);
- for(int m = 0; m < i; m++){
- if(m == t)
- continue;
- if(strlen(text[t]) != strlen(text[m]))
- continue;
- int count = 0;
- for(int k = 0; k < len; k++){
- int sym1 = text[t][k];
- int sym2 = text[t][k];
- if(sym1 == sym2 || abs(sym1 - sym2) == 32){
- count += 1;
- }
- }
- if(count == len)
- text[m][0] = '\0';
- }
- }
- }
- void output(char **text, int i){
- for(int h = 0; h < i; h++){
- if(text[h][0] != '\0')
- printf("%s ", text[h]);
- }
- printf("\n");
- }
- int main(){
- int len_text = 1;
- int len_sen = 3;
- int i=0;
- int j=0;
- char c;
- int q;
- char** text = calloc(len_text, sizeof(char*));
- text[i] = (char*) calloc(len_sen, sizeof(char));
- do{
- c = getchar();
- if( (c == '\t') || (c == ' ' && j == 0) )
- continue;
- if(c == '.' || c == '?' || c == ';' || c == '!'){
- len_text+=1;
- text = realloc(text, sizeof(char*)*(len_text));
- text[i][j] = c;
- text[i][j+1] = '\0';
- text[i+1] = (char*) calloc(3, sizeof(char));
- i++;
- j=0;
- len_sen = 3;
- continue;
- } else
- text[i][j] = c;
- if(j >= len_sen-3){
- len_sen+=3;
- text[i] = realloc(text[i], (len_sen)*sizeof(char));
- }
- j++;
- }while(c != '\n');
- delete_dublicates(text, i);
- char** newtext = calloc((i-1), sizeof(char*));
- for(int h = 0; h < i; h++){
- newtext[h] = (char*) calloc(strlen(text[h]), sizeof(char));
- strcpy(newtext[h], text[h]);
- }
- char* istr;
- char sep[10] = ", !;?.:";
- for(int h = 0; h < i; h++){
- if(istr == NULL)
- break;
- istr = strtok(newtext[h], sep);
- }
- printf("Выберите одно из действий:\n\n1) Найти в предложениях все даты записанные в виде “<год> <месяц> <day>” (“1886 Jun 03”) и заменить их на строку показывающую сколько осталось часов до конца года.\n2) Вывести все строки выделив слова на четных позициях красным цветом, а на нечетных зеленым.\n3) Удалить все предложения, которые начинаются и заканчиваются на одно и то же слово.\n4) Отсортировать предложения по увеличению сумме кодов символов первого слова в предложении.\n\nДля выбора действия введите цифру, которая соответствует номеру действия (1, 2, 3 или 4)\nДля выхода из программы введите 5.\n");
- scanf("%d", &q);
- switch(q){
- case 1:
- time(text, i);
- break;
- case 2:
- colored(text, i);
- return 0;
- case 3:
- delete(text, i);
- break;
- case 4:
- sort(newtext, text, i);
- return 0;
- case 5:
- return 0;
- default:
- printf("Данные некорректны\n");
- }
- output(text, i);
- for(int s = 0; s < i; s++)
- free(text[s]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement