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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 5.00
Viker
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 31
06.09.2011, 20:03     Запись в стек строк из файла #1
создаю стек следующим образом:
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; записывает новую инфу а не старую не понимаю почему.
спасибо за внимание.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
06.09.2011, 20:08     Запись в стек строк из файла #2
Цитата Сообщение от Viker Посмотреть сообщение
проблема в том что создаются элементы с тем же info, во всех элементах стека в info последняя строка.
в каждом элементе стэка, хранится указатель на один и тот же массив char, то есть на result_string. После последнего вызова fgets в нём, естественно, хранится последняя строка.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 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;
}
talis
 Аватар для talis
789 / 541 / 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 [] нужно будет сделать
Viker
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 31
06.09.2011, 20:24  [ТС]     Запись в стек строк из файла #5
спасибо!
а без #include <cstring> //string.h можно что то сделать?
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
06.09.2011, 20:25     Запись в стек строк из файла #6
Viker, да. Руками перепишите strlen и strcpy. Это не сложно, но практика будет иметь место быть
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 не формируется стек вообще.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2011, 03:27     Запись в стек строк из файла
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.09.2011, 03:27     Запись в стек строк из файла #8
Цитата Сообщение от Viker
пытался сделать так
для этого есть sprintf()
Yandex
Объявления
07.09.2011, 03:27     Запись в стек строк из файла
Ответ Создать тему
Опции темы

Текущее время: 03:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru