Advertisement
Guest User

Untitled

a guest
Dec 9th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | None | 0 0
  1. // ОЧИСТИТЬ ПАМЯТЬ!!!
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define LINE 100
  6.  
  7. void create(FILE *);
  8. void outFromStart(FILE *);
  9. void outFromEnd(FILE *);
  10. struct list *presence(char []);
  11.  
  12. struct list
  13. {
  14.     char *word;
  15.    
  16.     struct list *previous;
  17.     struct list *next;
  18.     int amount;
  19. } *start = NULL, *end = NULL;
  20.  
  21. int main(int argc, char *argv[])
  22. {
  23.     FILE *rp, *wp;
  24.     if (argc != 3)
  25.     {
  26.         printf("Введено аргументов: %d. Требуется: 3.\n", argc);
  27.         exit (1);
  28.     }
  29.     if ((rp=fopen(argv[1], "r")) == NULL)
  30.     {
  31.         printf("Не открыт файл %s\n", argv[1]);
  32.         exit (2);
  33.     }
  34.     if ((wp=fopen(argv[2], "w")) == NULL)
  35.     {
  36.         printf("Не открыт файл %s\n", argv[2]);
  37.         exit (2);
  38.     }
  39.     create(rp);
  40.     outFromStart(wp);
  41.     outFromEnd(wp);
  42.     fclose(rp);
  43.     fclose(wp);
  44.     return 0;
  45. }
  46.  
  47. void create(FILE *rp)
  48. {
  49.     char string[LINE];
  50.     struct list *p;
  51.     while (fscanf(rp,"%s", string) != EOF)
  52.     {
  53.         p = presence(string);
  54.         if (p != NULL)
  55.         {
  56.             p -> amount += 1;
  57.             continue;
  58.         }
  59.         p = malloc(sizeof(struct list));
  60.         if (p == NULL)
  61.         {
  62.             printf("Ошибка! Память не выделена!");
  63.             exit (3);
  64.         }
  65.         p -> word = malloc(sizeof(char) * strlen(string));
  66.         if (start == NULL)
  67.         {
  68.                 strcpy(p -> word, string);
  69.                 start = p;
  70.         }
  71.         else
  72.         {
  73.                 end -> next = p;
  74.                 p -> previous = end;
  75.                 strcpy(p -> word, string);
  76.         }
  77.         end = p;
  78.         p -> amount = 1;       
  79.     }
  80.     return;
  81. }
  82.  
  83. struct list *presence(char string[])
  84. {
  85.     struct list *p;
  86.     for (p = start; p != NULL; p -> next)
  87.         if ((strcmp(p -> word, string)) == 0)
  88.             return p;
  89.     return NULL;
  90. }
  91.  
  92. void outFromStart(FILE *wp)
  93. {
  94.     struct list *p;
  95.     fprintf(wp,"Вывод слов с начала списка:\n");
  96.     for (p = start; p != NULL; p = p -> next)
  97.         fprintf(wp, "Слово: %s \t Количество повторений: %d\n", p -> word, p -> amount);
  98.     return;
  99. }
  100.  
  101. void outFromEnd(FILE *wp)
  102. {
  103.     struct list *p;
  104.     fprintf(wp,"Вывод слов с конца списка:\n");
  105.     for (p = end; p != NULL; p = p -> previous)
  106.         fprintf(wp, "Слово: %s \t Количество повторений: %d\n", p -> word, p -> amount);
  107.     return;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement