![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Stanik24 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.7.2015 Репутация: нет Всего: нет |
Подскажите пожалуйста. Нужно пройти по списку и найти слово по первой букве, запомнить адрес, и начиная от этого адреса пройтись влево и вправо, посчитать общее количество узлов.Результаты вывести на экран.Вот Список, который записывается в txt файл. Там есть закоментированый вариант реализации, в нем что-то не так.Подскажите пожалуйста что?!Буду очень благодарен, за совет и за помощь. Есть предположение что я что -то напутал с областью видимости, и программа просто не видит нужный мне кусок кода.
#include <iostream> #include <cstring> #include <stdio.h> #include <cstddef> #include <conio.h> struct NodeLeter { char word[60]; int count; NodeLeter *next,*prev;//It's previor and next element }; typedef NodeLeter*PNodeLeter; PNodeLeter Head=NULL,Tail=NULL;//It's first and end head and tail PNodeLeter CreateNodeLetter(char NewWord[])//We create node with function { PNodeLeter NewNodeLeter=new NodeLeter; strcpy(NewNodeLeter->word,NewWord); NewNodeLeter->count=1; NewNodeLeter->next=NULL;//always must be null NewNodeLeter->prev=NULL;//always NULL to return NewNodeLeter; } void AddFirstElement(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter NewNodeLeter)//We add element for List { NewNodeLeter->next=Head;//It's always must be, head will be in NewNodeLeter NewNodeLeter->prev=NULL;//from begining=NUll,its data from struct in begining if(Head)Head->prev=NewNodeLeter;//Its bool operator,will do condition Head=NewNodeLeter;//Head will save NewNodeLeter if(!Tail)Tail=Head;//bool condition } void AddLastElement(PNodeLeter &Head,PNodeLeter &Tail,PNodeLeter NewNodeLeter)//With this function we add last element of list { NewNodeLeter->prev=Tail; NewNodeLeter->next=NULL; if(Tail)Tail->next=NewNodeLeter; Tail=NewNodeLeter; if(Head)Head=Tail; } void addAfter(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter p,PNodeLeter NewNodeLeter)//It's function Add element after { if(!p->next) AddLastElement(Head,Tail,NewNodeLeter); else { NewNodeLeter->next=p->next; NewNodeLeter->prev=p; p->next->prev=NewNodeLeter; p->next=NewNodeLeter; } } void addBefore(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter p,PNodeLeter NewNodeLeter)//It's function Add element before { if(!p->prev) AddFirstElement(Head,Tail,NewNodeLeter); else { NewNodeLeter->prev=p->prev; NewNodeLeter->next=p; p->prev->next=NewNodeLeter; p->prev=NewNodeLeter; } } PNodeLeter Find(PNodeLeter Tail,char NewWord[])//Find word { PNodeLeter q=Tail; while (q&&strcmp(q->word,NewWord)) q=q->prev; return q; } PNodeLeter FindPlace(PNodeLeter Tail,char NewWord[]) { PNodeLeter q=Tail; while (q&&(strcmp(q->word,NewWord)>0)) q=q->prev; return q; } void Delete(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter OldNodeLeter) { if (Head==OldNodeLeter) { Head=OldNodeLeter->next; if (Head) Head->prev=NULL; else Tail=NULL; } delete OldNodeLeter; } int main() { PNodeLeter p,where; FILE *in,*out; char word[60]; int n; in=fopen("input1.txt","r"); if(in!=NULL)printf("File open successfull!Press ENTER\n");//We entered from A...to last element getchar(); while (1) { n=fscanf(in,"%s",word); if(n<0)break; p=Find(Tail,word); if(p) p->count++; else { p=CreateNodeLetter(word); where=FindPlace(Tail,word); if(!where)AddFirstElement(Head,Tail,p); else addAfter(Head,Tail,where,p);//Wrote!!! } } fclose(in); printf("Double-linked list create successfull! Press ENTER\n"); getchar(); out = fopen("output-d.txt","w"); p = Tail; while (p) { fprintf(out, "%-20s\t%d\n", p->word, p->count); p = p->prev; } /* PNodeLeter Find(PNodeLeter Head, PNodeLeter Tail, char ch) { PNodeLeter p = Head; while (p != tail) { if (p->word[0] == ch) { p=Head; } p = p->next; } PNodeLetter leftp = p; while (leftp != Head) { leftCur = leftCur->prev; } PNodeLetter rightp = p; while (rightCur != head) { rightp = rightp ->next; } return p; }*/ fclose(out); return 0; } |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
А зачем Вы Find() засунули внутрь main()???
И кто писал комментарии на английском? В нём всё не так. И самое главное, оно не делает то, что задумано:
PS -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Stanik24 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.7.2015 Репутация: нет Всего: нет |
Здравствуйте!Коментарии на английском писал Я. И Find в main тоже Я сунул, потому как только учусь, поэтому прошу прощение за вопросы которые Вам кажутся нелепыми, и благодарен за советы которые помогут научится чему то новому.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |