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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
24.06.2011, 20:36     ifstream одсчет количества симолов #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
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++ fstream 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
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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 одсчет количества симолов
Ответ Создать тему
Опции темы

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