Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / список+С++ / 22 сообщений из 22, страница 1 из 1
25.04.2005, 11:00
    #33032793
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
Привет

Написать программу которая читает некоторый файлп записям и формирует единый список, в котором каждое слово исходного текста соответствует узлу. Ни число записей ни длина записи неизвестна.Если длина слова больше 256 символов,то оно усекается.

Вот что написал:
Код: plaintext
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.
#include <iostream.h>
#include <fstream.h>

struct Node
{
    char* slovo;
    Node* next;
};

class Output
{ 
private:
    Node* head;
    ifstream inFile;            
public:         
    Output(char name[]):head(NULL){inFile.open(name);}      
    ~Output();
    void print(void);
    void get_in(void);
};

void Output::get_in(void)
{
    Node* curr = NULL;
    while(inFile.peek() != EOF)
    {
        Node* A = new Node;
        A->slovo = new char[ 15 ];
        inFile>>A->slovo;   
       
        if (head == NULL) 
        {
            head = A;
            curr = A;
            curr->next = NULL;  
        }
        else
        {
            curr->next = A;
            curr = A;
            curr->next = NULL;
        }   
    }
}

void Output::print(void)
{
    Node* curr = head;
    while(curr)
    {
        cout<<curr->slovo<<endl;
        curr = curr->next;
    }
}

Output::~Output()
{
    Node* curr;
    while(head) 
    {
        curr = head;
        delete[] curr->slovo;
        head = curr->next;
        delete[] curr;
    }   
    inFile.close();     
}

int main( void )
{
    Output A("c:\class.txt");
    A.get_in();
    A.print();
    return  0 ;
}



Но почему то этот код не работает помогите кто чем может
...
Рейтинг: 0 / 0
25.04.2005, 11:30
    #33032868
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
авторOutput A("c:\class.txt");
Слеш надо двоить:
Output A("c:\\class.txt");
...
Рейтинг: 0 / 0
25.04.2005, 11:38
    #33032894
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
Всё равно не получается
...
Рейтинг: 0 / 0
25.04.2005, 11:42
    #33032902
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
Чё за ошибка?
Cannot call near class member function with a pointer of type 'ifstream far*'
...
Рейтинг: 0 / 0
25.04.2005, 11:57
    #33032931
Nash Bridges
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
Вот, посмотри

Код: plaintext
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.
#include <iostream>
#include <fstream>

struct Node
{
    char* slovo;
    Node* next;
};

using namespace std;

class Output
{ 
private:
    Node* head;
    ifstream inFile;            
public:         
    Output(char name[]):head(NULL){inFile.open(name);}      
    ~Output();
    void print(void);
    void get_in(void);
};

void Output::get_in(void)
{
    Node* curr = NULL;
    while(inFile.peek() != EOF)
    {
        Node* A = new Node;
        A->slovo = new char[ 15 ];
        inFile>>A->slovo;   
       
        if (head == NULL) 
        {
            head = A;
            curr = A;
            curr->next = NULL;  
        }
        else
        {
            curr->next = A;
            curr = A;
            curr->next = NULL;
        }   
    }
}

void Output::print(void)
{
    Node* curr = head;
    while(curr)
    {
        cout<<curr->slovo<<endl;
        curr = curr->next;
    }
}

Output::~Output()
{
    Node* curr;
    while(head) 
    {
        curr = head;
        delete[] curr->slovo;
        head = curr->next;
        delete[] curr;
    }   
    inFile.close();     
}

int main( void )
{
    Output A("c:\\class.txt");
    A.get_in();
    A.print();
    return  0 ;
}

и найди 4 отличия... :)
...
Рейтинг: 0 / 0
25.04.2005, 13:21
    #33033193
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
чё то всё равно не работает. Где там 4 отличия?
...
Рейтинг: 0 / 0
25.04.2005, 13:56
    #33033301
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
rergomusчё то всё равно не работает

хм, если метод void Output::get_in(void) докрутить хотя бы так:

Код: plaintext
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.
void Output::get_in(void)
{
	Node* curr = NULL;
	if(inFile)
		while(!inFile.eof())
		{
			Node* A = new Node;
			A->slovo = new char[ 15 ];
			inFile>>A->slovo;   

			if (head == NULL) 
			{
				head = A;
				curr = A;
				curr->next = NULL;  
			}
			else
			{
				curr->next = A;
				curr = A;
				curr->next = NULL;
			}   

		}
}

то, оно даже будет иногда работать.
но, честно говоря, проще переписать все :)
...
Рейтинг: 0 / 0
25.04.2005, 15:05
    #33033552
Nash Bridges
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
rergomusчё то всё равно не работает. Где там 4 отличия?

Все прекрасно работает!

Ты чем компилируешь? Какую ошибку выдает?
У меня VS 7.1.

Это
rergomus
Чё за ошибка?
Cannot call near class member function with a pointer of type 'ifstream far*'

будет вылазить пока using namespace std; в начале файла не пропишешь....
...
Рейтинг: 0 / 0
26.04.2005, 07:19
    #33034665
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
автор
будет вылазить пока using namespace std; в начале файла не пропишешь....


Я это прописываю в нчале проги компилятор мне на эту строку показывет и выводит сообщение: Declaration syntax error

почему?
...
Рейтинг: 0 / 0
26.04.2005, 07:24
    #33034667
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
компилятор: borland C++ 3.1
...
Рейтинг: 0 / 0
26.04.2005, 07:28
    #33034672
_рубль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
flex/bison - лексем/синтаксис генератор
такие вещи делает в два щета. рекомендую.
...
Рейтинг: 0 / 0
26.04.2005, 07:33
    #33034674
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
автор
flex/bison - лексем/синтаксис генератор
такие вещи делает в два щета. рекомендую.


Не понял
...
Рейтинг: 0 / 0
26.04.2005, 07:40
    #33034676
Dubrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
Только что пробовал откомпилировать. Все нормально работает. Скорее всего или неправильно настроены опции компилятора, или установлены не все RunTime библиотеки. Если компилируешь с командной строки, напиши какие ключи используешь.
---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
26.04.2005, 07:40
    #33034677
_рубль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
делаеш описание лексем
допустим
Код: plaintext
1.
2.
3.
[A-ZА-Яa-zа-я_0- 9 ]*
     любое вхождение русских и латинских букв, знака подчер-
     кивания и цифр.
Это только часть описания.
Далее программа flex на его основании генерирует для тебя исходные текст на C/C++ для чтения и разбора текста по словам.
bison - это генератор исходного текста для синтаксис анализа, результатом его работы будет сформированное дерево лексем.

ЗЫ это кратко, очень кратко. если мне нужно читать и анализировать текст то пользуюсь этими генераторами, освоить работу с ними не сложно, особенно с flex, с bison посложнее, здесь нужно немного знать основы синтаксис разбора.
В инете документации полно.
...
Рейтинг: 0 / 0
26.04.2005, 07:46
    #33034678
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
автор
Только что пробовал откомпилировать. Все нормально работает. Скорее всего или неправильно настроены опции компилятора, или установлены не все RunTime библиотеки. Если компилируешь с командной строки, напиши какие ключи используешь.
---
С уважением, Dubrov


Директории вроде все прописаны правильно. А что такое RunTime библиотеки? Please можно попдробнее что нужно посмотреть в настройках компилятора чтоб исправить эту лажу?
...
Рейтинг: 0 / 0
26.04.2005, 07:53
    #33034683
_рубль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
делаеш описание лексем
допустим
Код: plaintext
1.
2.
3.
[A-ZА-Яa-zа-я_0- 9 ]*
     любое вхождение русских и латинских букв, знака подчер-
     кивания и цифр.
Это только часть описания.
Далее программа flex на его основании генерирует для тебя исходные текст на C/C++ для чтения и разбора текста по словам.
bison - это генератор исходного текста для синтаксис анализа, результатом его работы будет сформированное дерево лексем.

ЗЫ это кратко, очень кратко. если мне нужно читать и анализировать текст то пользуюсь этими генераторами, освоить работу с ними не сложно, особенно с flex, с bison посложнее, здесь нужно немного знать основы синтаксис разбора.
В инете документации полно.
...
Рейтинг: 0 / 0
26.04.2005, 07:57
    #33034687
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
автор
Только что пробовал откомпилировать. Все нормально работает. Скорее всего или неправильно настроены опции компилятора, или установлены не все RunTime библиотеки. Если компилируешь с командной строки, напиши какие ключи используешь.
---
С уважением, Dubrov



Директории вроде все прописаны правильно. А что такое RunTime библиотеки? Please можно попдробнее что нужно посмотреть в настройках компилятора чтоб исправить эту лажу?
...
Рейтинг: 0 / 0
26.04.2005, 11:08
    #33035123
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
Судя по задаче и используемому инструменту (borland 3.1) у автора проблемы с решением домашенго задания. А тут советы насчет bison/flex, настроек компилятора и runtime :)

Проблемы, если они имеют место быть, скорее всего связаны с открытием или чтением файла. Я вот нигде не вижу проверки на результат операции open. Потом чтение... Вариант от Nash Bridges (собрал VC.NET), например, у меня вывалился по AV на таком тестовом файле:

aaaa
bbbbbb
cccccccc

И т.д...

p.s. Чтобы нормально использовать потоки stl, лучше конеш, сменить bc 3.1 на что-нибудь поновее (если есть возможность).
...
Рейтинг: 0 / 0
26.04.2005, 11:11
    #33035136
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
автор
p.s. Чтобы нормально использовать потоки stl, лучше конеш, сменить bc 3.1 на что-нибудь поновее (если есть возможность).


Возможности, к сожалению, нет
...
Рейтинг: 0 / 0
06.05.2005, 07:35
    #33051806
Dubrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
redskin
Судя по задаче и используемому инструменту (borland 3.1) у автора проблемы с решением домашенго задания. А тут советы насчет bison/flex, настроек компилятора и runtime :)

Так вот в том и дело что человек которому нужно зделать домашнюю работу может в настройках компилятора (и компоновщика) ничего не понимать. Ему дали диск и сказали: "Отсюда запустишь Install.exe, и пользуйся". А там чего-нибудь не хватает, хотя при этом должна вылететь совсем другая ошибка, вроде: "Cannot find c:\bc31\lib\crt\c0m.lib" или что-то подобное.
Кстати, если у человека вылетает что ф-ция near, а вызов - far, то, я чуйствую точно, что модель памяти не соответствует настройкам оболочки (т.к., похоже используется именно IDE, а не CommandLine).
---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
06.05.2005, 07:42
    #33051809
Dubrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
rergomus автор
будет вылазить пока using namespace std; в начале файла не пропишешь....


Я это прописываю в нчале проги компилятор мне на эту строку показывет и выводит сообщение: Declaration syntax error

почему?
И будет вылазить.
Используются библиотеки iostream. h и fstream. h а они задают ф-ции в глобальном пространстве имен, а не в std . Для std используются другие имена:
1. Для С++ - вместо <abc.h> - <abc>
2. Для С - вместо <abc.h> - < c abc>
---
C уважением, Dubrov.
...
Рейтинг: 0 / 0
06.05.2005, 08:01
    #33051816
Dubrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список+С++
rergomus
Директории вроде все прописаны правильно. А что такое RunTime библиотеки? Please можно попдробнее что нужно посмотреть в настройках компилятора чтоб исправить эту лажу?

Почти любая программа, написанная на языке высокого уровня (хоть С, хоть С++,чоть Pascal ...) использует внешние ф-ции (например printf или getch для С). Все эти внешние ф-ции находятся в специальной стандартной библиотеке. Проблема заключается в том, что откомпилировать программу можно в разных моделях памяти, они отличаются друг от друга немного, но отличаются, но для каждой из них нужна своя библиотека и если у тебя ее нет будут глюки. Будет желание узнать поподробнее - пиши на мой E-mail (f49s152@pochta.ru).
---
C уважением, Dubrov.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / список+С++ / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]