powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / список+С++
22 сообщений из 22, страница 1 из 1
список+С++
    #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
список+С++
    #33032868
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторOutput A("c:\class.txt");
Слеш надо двоить:
Output A("c:\\class.txt");
...
Рейтинг: 0 / 0
список+С++
    #33032894
rergomus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё равно не получается
...
Рейтинг: 0 / 0
список+С++
    #33032902
rergomus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чё за ошибка?
Cannot call near class member function with a pointer of type 'ifstream far*'
...
Рейтинг: 0 / 0
список+С++
    #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
список+С++
    #33033193
rergomus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чё то всё равно не работает. Где там 4 отличия?
...
Рейтинг: 0 / 0
список+С++
    #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
список+С++
    #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
список+С++
    #33034665
rergomus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
будет вылазить пока using namespace std; в начале файла не пропишешь....


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

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


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

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


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

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



Директории вроде все прописаны правильно. А что такое RunTime библиотеки? Please можно попдробнее что нужно посмотреть в настройках компилятора чтоб исправить эту лажу?
...
Рейтинг: 0 / 0
список+С++
    #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
список+С++
    #33035136
rergomus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
p.s. Чтобы нормально использовать потоки stl, лучше конеш, сменить bc 3.1 на что-нибудь поновее (если есть возможность).


Возможности, к сожалению, нет
...
Рейтинг: 0 / 0
список+С++
    #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
список+С++
    #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
список+С++
    #33051816
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rergomus
Директории вроде все прописаны правильно. А что такое RunTime библиотеки? Please можно попдробнее что нужно посмотреть в настройках компилятора чтоб исправить эту лажу?

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


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