Для файл с текстом input.txt построить алфавитно частичный словарь в файле output.txt - C (СИ)
Формулировка задачи:
Помогите разобраться, не могу понять как сделать, чтобы алфавит размещался в росте (a, b, c, d ,...)
условие задачи.
Алфавитно частичный словарь.
Задан входной файл с текстом input.txt построить для него алфавитно частичный словарь в файле output.txt.
#include<conio.h> #include<string.h> #include<alloc.h> #include<stdio.h> FILE *in, *out; struct Node { char word[40]; int count; Node *next; }; typedef Node *PNode; PNode Find(PNode Head, char NewWord[]) { PNode g=Head; while(g&&strcmp(g->word,NewWord)) { g=g->next; } return g; } PNode Find1(PNode Head, char NewWord[]) { PNode g=Head; while (strcmpi(g->word,NewWord)>0) g=g->next; return g; } void AddFirst(PNode & Head,PNode NewNode) { NewNode->next=Head; Head=NewNode; } void AddAfter(PNode p, PNode NewNode) { NewNode->next=p->next; p->next=NewNode; } void AddBefore(PNode&Head, PNode p, PNode NewNode) { PNode g=Head; if(Head==p) { AddFirst(Head, NewNode); return; } while (g&&g->next!=p) g=g->next; if(g) AddAfter(g,NewNode); } void AddLast(PNode&Head, PNode NewNode) { PNode g=Head; if (Head==NULL) { AddFirst(Head,NewNode); return; } while(g->next) g=g->next; AddAfter(g,NewNode); } PNode CreateNode(char NewWord[]) { PNode NewNode= new Node; strcpy(NewNode->word,NewWord); NewNode->count=1; NewNode->next=NULL; return NewNode; } void main() { PNode Head=NULL, p,where; char word [80]; int n; in=fopen("input.txt","rt"); while(1) { n=fscanf(in,"%s",word); if(n<=0) break; p=Find(Head,word); if (p!=NULL) p->count++; else { p=CreateNode(word); where=Find1(Head,word); if (!where) AddLast(Head,p); else AddBefore(Head,where,p); } } fclose(in); out=fopen("output.txt","wt"); p=Head; while(p) { fprintf(out,"%-20s\t%d\n",p->word,p->count); p=p->next; } fclose(out); return ; }
Решение задачи: «Для файл с текстом input.txt построить алфавитно частичный словарь в файле output.txt»
textual
Листинг программы
#include<conio.h> #include<string.h> #include<stdio.h> FILE *in, *out; struct Node { char word[40]; int count; Node *next; }; typedef Node *PNode; PNode Find(PNode Head, char NewWord[]) { PNode g=Head; while(g&&strcmp(g->word,NewWord)) { g=g->next; } return g; } PNode Find1(PNode Head, char NewWord[]) { PNode g=Head; while (g&&strcmpi(g->word,NewWord)<0) g=g->next; return g; } void AddFirst(PNode & Head,PNode NewNode) { NewNode->next=Head; Head=NewNode; } void AddAfter(PNode p, PNode NewNode) { NewNode->next=p->next; p->next=NewNode; } void AddBefore(PNode&Head, PNode p, PNode NewNode) { PNode g=Head; if(Head==p) { AddFirst(Head, NewNode); return; } while (g&&g->next!=p) g=g->next; if(g) AddAfter(g,NewNode); } void AddLast(PNode&Head, PNode NewNode) { PNode g=Head; if (Head==NULL) { AddFirst(Head,NewNode); return; } while(g->next) g=g->next; AddAfter(g,NewNode); } PNode CreateNode(char NewWord[]) { PNode NewNode= new Node; strcpy(NewNode->word,NewWord); NewNode->count=1; NewNode->next=NULL; return NewNode; } void main() { PNode Head=NULL, p,where; char word [80]; int n; in=fopen("input.txt","rt"); while(1) { n=fscanf(in,"%s",word); if(n<=0) break; p=Find(Head,word); if (p!=NULL) p->count++; else { p=CreateNode(word); where=Find1(Head,word); if (!where) AddLast(Head,p); else AddBefore(Head,where,p); } } fclose(in); out=fopen("output.txt","wt"); p=Head; while(p) { fprintf(out,"%-20s\t%d\n",p->word,p->count); p=p->next; } fclose(out); return ; }
Объяснение кода листинга программы
В этом коде используется структура данных Node
для создания списка слов. Список создается путем чтения слов из файла input.txt
и добавления их в список. Каждое слово в списке подсчитывается, и результаты записываются в файл output.txt
.
- Создаются структуры данных
Node
иPNode
. - Определяются функции для поиска, добавления и удаления элементов в списке.
- В функции
main
открывается файлinput.txt
для чтения и файлoutput.txt
для записи. - Создается пустой список с помощью указателя
Head
. - В цикле считываются слова из файла
input.txt
. - Для каждого слова выполняется поиск в списке.
- Если слово уже есть в списке, увеличивается его счетчик.
- Если слова нет в списке, оно добавляется в конец списка.
- После завершения чтения файла, список записывается в файл
output.txt
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д