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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 5.00
Viker
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 31
#1

Запись в стек строк из файла - C++

06.09.2011, 20:03. Просмотров 3431. Ответов 7
Метки нет (Все метки)

создаю стек следующим образом:
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
int _tmain(int argc, _TCHAR* argv[])
{
    char*fname="D:\\NameOfFile.txt";
    FILE*file;
    char result_sting[100];
    int i=0;
    stek*p1=0;
 
        file = fopen(fname,"r");
 
        if(file == 0)
        {
            printf("cann't found file '%s'",fname);
        }
        else
        {
        while(!feof(file))
        {
            p1=push(p1,fgets(result_sting,100,file));
 
        }
        print_stek(p1);
        fclose(file);
        }
        getch();
    return 0;
}
stek* push(stek* top, char* d)
{
    stek* tmp = new stek;
    tmp->info=d;
    tmp->adr=top;
    return tmp;
}
struct stek
{
    char*info;
    stek*adr; 
};
проблема в том что создаются элементы с тем же info, во всех элементах стека в info последняя строка.
такое впечатление что в методе push присваивание tmp->adr=top; записывает новую инфу а не старую не понимаю почему.
спасибо за внимание.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2011, 20:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись в стек строк из файла (C++):

Заполнить целочисленный стек длинами строк, считанными из файла и вывести результат на экран - C++
Опишите стек с целочисленным информационным полем. Заполните его длинами строк, считанных из файла. Распечатайте на экране содержимое...

Запись в файл и вывод из файла строк - C++
Есть две функции: одна записывает дисциплину в файл, другая выводит список дисциплин на экран. Проблема в том, что если название дисциплины...

Чтение из файла и запись строк в массив - C++
Здравствуйте! Сейчас пишу свою реализацию алгоритма FIFS и возникла проблема с записью данных из файла в массив. Формат входных данных в...

Считывание строк из файла и запись в разные векторы - C++
Как считать строки допустим есть 2 строки в файле input.txt Cat mouse dog House table chair Как их правильно...

Организовать запись строк из одного файла в другой через одну - C++
Задание: организовать запись строк из одного файла в другой через одну, т.е. все нечётные. Помогите пожалуйста. Я знаю как сделать просто...

Запись в стек - C++
С С++ я не особо дружу, но нужно для лабы реализовать запись данных в стек именно на нем (( Насколько я помню push заталкивает данные...

7
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
06.09.2011, 20:08 #2
Цитата Сообщение от Viker Посмотреть сообщение
проблема в том что создаются элементы с тем же info, во всех элементах стека в info последняя строка.
в каждом элементе стэка, хранится указатель на один и тот же массив char, то есть на result_string. После последнего вызова fgets в нём, естественно, хранится последняя строка.
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.09.2011, 20:08 #3
строку нужно копировать
C++
1
2
3
4
5
6
7
8
9
#include <cstring> //string.h
 
stek* push(stek* top, const char* d)
{
    stek* tmp = new stek;
    strcpy(tmp->info, d);
    tmp->adr = top;
    return tmp;
}
1
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
06.09.2011, 20:11 #4
Jupiter, а чему изначально равен tmp->info?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
#include <cstring> //string.h
 
stek* push(stek* top, const char* d)
{
    stek* tmp = new stek;
    tmp->info = new char[ strlen(d) + 1 ];
    strcpy(tmp->info, d);
    tmp->adr = top;
    return tmp;
}
так тогда уж

Добавлено через 15 секунд
и потом ещё delete [] нужно будет сделать
2
Viker
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 31
06.09.2011, 20:24  [ТС] #5
спасибо!
а без #include <cstring> //string.h можно что то сделать?
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
06.09.2011, 20:25 #6
Viker, да. Руками перепишите strlen и strcpy. Это не сложно, но практика будет иметь место быть
0
Viker
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 31
07.09.2011, 02:21  [ТС] #7
нужно еще сделать метод что нумерует р1->info, то есть добавляет номер перед р1->info. (р1->info=номер:+р1->info)
пытался сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
stek* renumber(stek*st)
{
    stek* st1=0;
    char buffer [3];
    int i=0;
    while(st)
    {
       st1=push(st1,strcat(itoa(i,buffer,10),st->info));
       i=i+1;
       st=pop(st,st->info);
    }
    return st1;
}
но в результате в st1 не формируется стек вообще.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.09.2011, 03:27 #8
Цитата Сообщение от Viker
пытался сделать так
для этого есть sprintf()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2011, 03:27
Привет! Вот еще темы с ответами:

СТЕК. Запись последующего элемента. - C++
Вводим стек (top), если элемент стека больше а, то этот элимент запишим в новый стек(top2) Вродь пустяк, но не могу врубиться, первый...

Стек строк. Ошибка сегментации - C++
Привет всем! Программирую недавно, около месяца, в своей программе столкнулся с ошибкой сегментации. Не могу понять, в чем проблема. ...

Стек записи на основе статического массива типа запись - C++
Добрый вечер! Помогите пожалуйста выполнить задание: Создать стек записи Спортсмен на основе статического массива типа запись. ...

Записать данные из файла в стек - C++
Здравствуйте. Имеется стек, нужно загрузить в него данные из текстового файла. Стек реализован с помощью структуры. Как это можно...


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

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

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