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

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

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

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

24.06.2011, 20:36. Просмотров 1130. Ответов 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 одсчет количества симолов
Посмотрите здесь:

Преобразование симолов. - C++
Здравствуйте возник вопрос. Предположим мы в массиве char num храним число, каждая цифра в отдельной ячейке массива, так вот как же нам...

необходимо настроить ввод русских симолов - C++
/* STRTOK.C: In this program, a loop uses strtok * to print all the tokens (separated by commas * or blanks) in the string named...

Написать программу которая делает перестановки введенных симолов - C++
Доброго всем времени суток. вот такая задачка. 4. Написать программу которая делает перестановки введенных симолов Все бы ничего. Но тут...

ifstream - C++
Привет всем такая проблема ввода Student* s;// студенты s = new Student; ifstream fin(&quot;Student.txt&quot;); for(int i(0); i &lt; l;...

не работает в ifstream - C++
Сам очень плохо разбираюсь в &lt;fstream&gt; Вот код, который должен &quot;записывать и выводить&quot; данные из ранее записанного текстового документа: ...

Объект ifstream!!! - C++
Почему при попытке повторного вывода содержимого файла он не выводится???? Почему не работает эта строка: fin.open(fileName); ???? Вот...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
682 / 584 / 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
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2011, 05:32     ifstream одсчет количества симолов
Еще ссылки по теме:

Объект ifstream!!! - C++
Скажите пожалуйста, почему при создании объекта ifstream(например fin) и привязке его к определенному файлу (ifstream fin(filename);), и...

Unget and ifstream - C++
Я правильно понимаю, что если ifstream in; string str1; in &gt;&gt; str1, то unget обратно эту строку вернет?

Ifstream ошибка - C++
int main(int argc, char* argv) { setlocale(LC_ALL,&quot;Russian&quot;); // корректное отображение Кириллицы char buff; // буфер...

ifstream считывает 0 - C++
Здравствуйте. Есть 2 текстовых файла с названиями n.in n.out .Содержимое входящего файла 1 5 2 4 3 9 4 7 5


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

Или воспользуйтесь поиском по форуму:
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
26.06.2011, 05:32  [ТС]     ifstream одсчет количества симолов #5
Спасибо вам всем большое)))
Yandex
Объявления
26.06.2011, 05:32     ifstream одсчет количества симолов
Ответ Создать тему
Опции темы

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