Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BukTOP_10
1 / 1 / 0
Регистрация: 05.10.2011
Сообщений: 13
#1

Разобраться в некоректности программы!(англо-русский словарь лин. списком) - C++

17.11.2011, 22:15. Просмотров 922. Ответов 4
Метки нет (Все метки)

Здравствуйте,помогите пожалуйста с программой,требуется написать программу для русско-английского словаря,читать слова из текстового файла и хранить с помощью лин. списка.
Написал код,компилится,а вот не работает как задумывалось,где-то ошибка с памятью или ещё в чём-то,подозрения на функцию CreateLinSpis
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include<iostream>
#include<fstream>
#include <windows.h>
 
struct LE
{
  char text[30];
  struct LE *next;
};
 
using namespace std;
 
char bufRus[256];
 
char* rus(const char* text)
{
      CharToOem(text,bufRus);
      return bufRus;
}
 
LE* CreateLinSpis()
{
    LE *top,*p;
    top=NULL;
    
    ifstream fileIn;
    fileIn.open("database.txt");
    if(!fileIn.is_open()){   cout << "Error opening file"<< endl;
                              fileIn.close();
                              exit(1);
                          }
    while(!fileIn.eof())
    {
            p=new LE[sizeof(LE)];
            fileIn.getline(p->text,30); //извлекаем слова построчно
            
            p->next=top; top=p;         
            
   } 
    fileIn.close();
} 
 
void PrintLinSpis(LE *p)
{
      while(p)
      {
              cout<<rus(p->text)<<endl;
              p=p->next;
      }
}
 
void DestructLinSpis(LE *p)
{
    LE *next;
    while(p)
    {
        next=p->next;
        delete []p;
        p=next;
    }
} 
 
int Find(LE *p)
{
    char word[30],*buf1=NULL,*buf2 = NULL;
    bool find=false;
    
    cout<<"Enter word to translate:";
    cin.getline(word,30); 
    
    while(!(&p))
    {
      buf1=strtok(p->text,"-");
      buf2=strtok(NULL," ");
      buf1=rus(buf1);
      if (*buf1==*word && strlen(buf1)==strlen(word))
      {
 
         cout << word << " = " << rus(buf2) << endl;
         find = true;
         return 1;
      }
      if (*buf2 == *word && strlen(buf2) == strlen(word))
      {
         cout << word << " = " << buf1 << endl;
         find = true;
         return 1;
      }
      p=p->next;
   }
   if (!find) cout<<"No match"<<endl; //если совпадений не найдено
   return 0;
} 
 
main()
{
LE *p=NULL;
 
p=CreateLinSpis();
Find(p);
//PrintLinSpis(p);
system("pause");
DestructLinSpis(p);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2011, 22:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разобраться в некоректности программы!(англо-русский словарь лин. списком) (C++):

Англо-русский словарь - C++
нужно написать программу &quot;англо-русский и русско-английский словарь&quot; база данных словаря должна содержать синонимичные варианты перевода...

Англо-русский словарь на С++ - C++
Помогите пожалста. Втупляю, немогу придумать ничего дельного. Разработать класс «Граф» для решения следующей задачи. Задан файл,...

Англо-русский словарь - C++
Прошу вас помочь написать мне программу на Borland C, программа (англо-русский словарь) Вот задание: Поиск информации с помощью...

Класс «англо – русский словарь» - C++
Определите класс «англо – русский словарь». Словарь состоит из различных слов английского языка, упорядоченных по алфавиту. Прописные и...

Русско-английский и англо-русский словарь - C++
Здравствуйте господа программисты! Мне нужна помощь. В курсовой работе есть задание &quot;Создать проект «Русско-английский и англо-русский...

Реализовать русско-английский и англо-русский словарь - C++
Надо было реализовать словарь с русского на англ и наоборот. #include &quot;iostream&quot; #include &quot;string.h&quot; using namespace std; int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
17.11.2011, 22:30 #2
Полно.
Первое, что бросается в глаза -- функция CreateLinSpis ничего не возвращает.

Второе:
Цитата Сообщение от BukTOP_10 Посмотреть сообщение
p=new LE[sizeof(LE)];
Выделяется не один элемент в памяти, а количество элементов, равное количеству байт, которое занимает структура LE. Может, конечно, в этом что-то сакральное, но выглядит как ошибка. Имелось в виду "new LE;"?

Третье.
Судя по обрывкам алгоритма, похоже, что top надо инициализировать нуллом.

Наверняка есть что-то еще, но пока этого хватит.
0
BukTOP_10
1 / 1 / 0
Регистрация: 05.10.2011
Сообщений: 13
17.11.2011, 23:01  [ТС] #3
да,первое исправил сразу,заметил чуть позже,по второму не понял до сих пор ,а третье top-у присваивается NULL,в 24 строке)
посмотрите пожалуйста ещё,очень буду вам признателен
Вот подисправленный вариант:
Код
#include<iostream>
#include<fstream>
#include <windows.h>

struct LE
{
  char text[30];
  struct LE *next;
};

using namespace std;

char bufRus[256];
 
char* rus(const char* text)
{
      CharToOem(text,bufRus);
      return bufRus;
}

LE* CreateLinSpis()
{
    LE *top,*p;
    top=NULL;
    
    ifstream fileIn;
    fileIn.open("database.txt");
	if(!fileIn.is_open()){   cout << "Error opening file"<< endl;
                              fileIn.close();
                              exit(1);
                          }
    while(!fileIn.eof())
    {
            p=new LE;
            fileIn.getline(p->text,30); //извлекаем слова построчно
            
            p->next=top; top=p;         
            
   } 
    fileIn.close();
    return p;
} 

void PrintLinSpis(LE *p)
{
	  while(p)
	  {
			  cout<<rus(p->text)<<endl;
			  p=p->next;
	  }
}

void DestructLinSpis(LE *p)
{
	LE *next;
	while(p)
	{
		next=p->next;
		delete []p;
		p=next;
	}
} 

int Find(LE *p)
{
    char word[30]={'\0'},*buf1=NULL,*buf2 = NULL;
    bool find=false;
    
    cout<<"Enter word to translate:";
    cin.getline(word,30); 
    
    while(!(&p))
    {
      buf1=strtok(p->text,"-");
      buf2=strtok(NULL," ");
      buf1=rus(buf1);
      if (*buf1==*word && strlen(buf1)==strlen(word))
      {
 
         cout << word << " = " << rus(buf2) << endl;
         find = true;
         return 1;
      }
      if (*buf2 == *word && strlen(buf2) == strlen(word))
      {
         cout << word << " = " << buf1 << endl;
         find = true;
         return 1;
      }
      p=p->next;
   }
   if (!find) cout<<"No match"<<endl; //если совпадений не найдено
   return 0;
} 

main()
{
LE *p=NULL;

p=CreateLinSpis();
Find(p);
PrintLinSpis(p);
system("pause");
DestructLinSpis(p);
}
почему то не хочет находить заданное слово,которое есть в словаре,не могу понять почему(P.S. слова в словаре формировал так: рука-hand)
делал в отдельной программе без лин списка функцию find всё искало,работало,а тут нет...
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
17.11.2011, 23:34 #4
"while(!(&p))"? Пока адрес переменной, содержащей указатель, NULL???
И вообще странный код функции find.
0
BukTOP_10
1 / 1 / 0
Регистрация: 05.10.2011
Сообщений: 13
18.11.2011, 08:38  [ТС] #5
спасибо вам большое,исправил,программа успешно работает
а на счёт кода find до какого догадался,используя предыдущ темы на форуме...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 08:38
Привет! Вот еще темы с ответами:

Курсовая работа на тему англо-русский словарь - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;clocale&gt; #include &lt;stdlib.h&gt; #include &lt;locale&gt; int...

Англо-русский словарь построен как двоичное дерево. - C++
Всем привет! Помогите пожалуйста с написанием программы:cry: Очень прошу:gcray: Англо-русский словарь построен как двоичное дерево. ...

Англо-русский словарь построен в виде двоичного дерева в программе с++ - C++
Англо-русский словарь построен в виде двоичного дерева. Каждая компонента содержит английское слово, соответствующее ему русское слово и...

Англо русский переводчик - C++
посмотрите плиз,прога перводчик проверяет слова в текстовом файле(словаре),мне нужно дополнить словарь,но прога в текстовый документ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.11.2011, 08:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru