Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ОЧИСТИТЬ ПАМЯТЬ!!!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define LINE 100
- void create(FILE *);
- void outFromStart(FILE *);
- void outFromEnd(FILE *);
- struct list *presence(char []);
- struct list
- {
- char *word;
- struct list *previous;
- struct list *next;
- int amount;
- } *start = NULL, *end = NULL;
- int main(int argc, char *argv[])
- {
- FILE *rp, *wp;
- if (argc != 3)
- {
- printf("Введено аргументов: %d. Требуется: 3.\n", argc);
- exit (1);
- }
- if ((rp=fopen(argv[1], "r")) == NULL)
- {
- printf("Не открыт файл %s\n", argv[1]);
- exit (2);
- }
- if ((wp=fopen(argv[2], "w")) == NULL)
- {
- printf("Не открыт файл %s\n", argv[2]);
- exit (2);
- }
- create(rp);
- outFromStart(wp);
- outFromEnd(wp);
- fclose(rp);
- fclose(wp);
- return 0;
- }
- void create(FILE *rp)
- {
- char string[LINE];
- struct list *p;
- while (fscanf(rp,"%s", string) != EOF)
- {
- p = presence(string);
- if (p != NULL)
- {
- p -> amount += 1;
- continue;
- }
- p = malloc(sizeof(struct list));
- if (p == NULL)
- {
- printf("Ошибка! Память не выделена!");
- exit (3);
- }
- p -> word = malloc(sizeof(char) * strlen(string));
- if (start == NULL)
- {
- strcpy(p -> word, string);
- start = p;
- }
- else
- {
- end -> next = p;
- p -> previous = end;
- strcpy(p -> word, string);
- }
- end = p;
- p -> amount = 1;
- }
- return;
- }
- struct list *presence(char string[])
- {
- struct list *p;
- for (p = start; p != NULL; p -> next)
- if ((strcmp(p -> word, string)) == 0)
- return p;
- return NULL;
- }
- void outFromStart(FILE *wp)
- {
- struct list *p;
- fprintf(wp,"Вывод слов с начала списка:\n");
- for (p = start; p != NULL; p = p -> next)
- fprintf(wp, "Слово: %s \t Количество повторений: %d\n", p -> word, p -> amount);
- return;
- }
- void outFromEnd(FILE *wp)
- {
- struct list *p;
- fprintf(wp,"Вывод слов с конца списка:\n");
- for (p = end; p != NULL; p = p -> previous)
- fprintf(wp, "Слово: %s \t Количество повторений: %d\n", p -> word, p -> amount);
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement