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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
#1

ifstream одсчет количества симолов - C++

24.06.2011, 20:36. Просмотров 1089. Ответов 4
Метки нет (Все метки)

Здравствуйте!)
Подскажите пожалуйста как при работе с потоком можно подсчитать количество строк, выделить память в массиве а потом туда записать все что нужно из потока.

КОД НЕ ПРАВЕЛЬНЫЙ!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
std::ifstream ifs;
    ifs.open("text2.txt");
    char* s_buf=new char[1024];
    char** buf;
    long i=0;
    //подсчет количества строк
    while(ifs){
        ifs.getline(s_buf,1024);
        if (0 == ifs.gcount())break;
        i++;
    }
    buf=new char*[i];//выделили память под строки
    i=0;
    ifs.seekg(0,std::ios::beg);//вроде как встали в начало
    while(ifs){
        ifs.getline(s_buf, 1024);//эта фигня отказыается считывать, почему???
        if (0 == ifs.gcount())break;
        buf[i]=new char[strlen(s_nuf)+1];
        strcpy(buf[i],s_buf);
        i++;
    }
 
    for(;i>=0;i--)std::cout<<buf[i]<<std::endl;
но как-то по другому придумать не могу, хотя можно его закрыть, потом открыть и считать...но не уже ли без этого не обойтись?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2011, 20:36     ifstream одсчет количества симолов
Посмотрите здесь:

Объект ifstream!!! C++
Преобразование симолов. C++
C++ Объект ifstream!!!
необходимо настроить ввод русских симолов C++
C++ ifstream
ifstream ofstream C++
ifstream считывает 0 C++
C++ Написать программу которая делает перестановки введенных симолов
Ifstream ошибка C++
не работает в ifstream C++
Различия ifstream::get() и ifstream::get(ch) C++
Unget and ifstream C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.06.2011, 20:49     ifstream одсчет количества симолов #2
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
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <list>
#include <cstdlib>
#include <clocale>
#include <conio.h>
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    std::string fileName;
    std::cout << "Введите имя файла" << std::endl;
    std::cin >> fileName;
 
    std::ifstream file(fileName.c_str());
    if (file.fail())
    {
        std::cerr << "Невозможно открыть файл" << std::endl;
        _getch();
        return EXIT_FAILURE;
    }
 
    std::string tmp;
    std::list<std::string> text;
    while(std::getline(file, tmp))
    {
        text.push_back(tmp);
    }
 
    std::cout << "Считанный текст" << std::endl;
    std::copy(text.begin(), text.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
 
    _getch();
    return EXIT_SUCCESS;
}
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
24.06.2011, 21:01  [ТС]     ifstream одсчет количества симолов #3
Это замечательно)))
Но у меня в задании массив строк)))
точнее список статических двумерных массивов строк т.е.
C++
1
2
3
4
5
6
7
//структура элемента списка
template<int T>
struct elist{
    elist* next;
    elist* prev;
    char* mass[T]
};
grizlik78
Эксперт С++
 Аватар для grizlik78
1890 / 1422 / 104
Регистрация: 29.05.2011
Сообщений: 2,977
25.06.2011, 16:53     ifstream одсчет количества симолов #4
Цитата Сообщение от Глупец Посмотреть сообщение
C++
1
ifs.getline(s_buf, 1024);//эта фигня отказыается считывать, почему???
Потому, что при подсчёте строк было достигнут конец файла и поток находится в состоянии ошибки. Надо перед возвратом указателя произвести сброс состояния.
C++
1
ifs.clear();
Добавлено через 10 минут
Плюс в конце вывод не с того элемента. Надо как-нибудь так.
C++
1
2
while (i)
        std::cout<<buf[--i]<<std::endl;
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
26.06.2011, 05:32  [ТС]     ifstream одсчет количества симолов #5
Спасибо вам всем большое)))
Yandex
Объявления
26.06.2011, 05:32     ifstream одсчет количества симолов
Ответ Создать тему
Опции темы

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