Для файл с текстом 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.

  1. Создаются структуры данных Node и PNode.
  2. Определяются функции для поиска, добавления и удаления элементов в списке.
  3. В функции main открывается файл input.txt для чтения и файл output.txt для записи.
  4. Создается пустой список с помощью указателя Head.
  5. В цикле считываются слова из файла input.txt.
  6. Для каждого слова выполняется поиск в списке.
  7. Если слово уже есть в списке, увеличивается его счетчик.
  8. Если слова нет в списке, оно добавляется в конец списка.
  9. После завершения чтения файла, список записывается в файл output.txt.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы