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

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

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

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

24.06.2011, 20:36. Просмотров 1162. Ответов 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;
но как-то по другому придумать не могу, хотя можно его закрыть, потом открыть и считать...но не уже ли без этого не обойтись?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2011, 20:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ifstream одсчет количества симолов (C++):

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

Различия ifstream::get() и ifstream::get(ch) - C++
Доброго времени суток. Была тут тема, в которой я не разобрался до конца. Код ниже проверяет баланс скобок в текстовом файле #include...

необходимо настроить ввод русских симолов - 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; данные из ранее записанного текстового документа: ...

4
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.06.2011, 20:49 #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;
}
1
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
24.06.2011, 21:01  [ТС] #3
Это замечательно)))
Но у меня в задании массив строк)))
точнее список статических двумерных массивов строк т.е.
C++
1
2
3
4
5
6
7
//структура элемента списка
template<int T>
struct elist{
    elist* next;
    elist* prev;
    char* mass[T]
};
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
25.06.2011, 16:53 #4
Цитата Сообщение от Глупец Посмотреть сообщение
C++
1
ifs.getline(s_buf, 1024);//эта фигня отказыается считывать, почему???
Потому, что при подсчёте строк было достигнут конец файла и поток находится в состоянии ошибки. Надо перед возвратом указателя произвести сброс состояния.
C++
1
ifs.clear();
Добавлено через 10 минут
Плюс в конце вывод не с того элемента. Надо как-нибудь так.
C++
1
2
while (i)
        std::cout<<buf[--i]<<std::endl;
1
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
26.06.2011, 05:32  [ТС] #5
Спасибо вам всем большое)))
0
26.06.2011, 05:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2011, 05:32
Привет! Вот еще темы с ответами:

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

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

fstream ifstream - C++
подключил библиотеку fstream создал объект ifstream file открыл файл, поработал(считывал до конца &lt; eof()) сделал file.close(); ...

ifstream ofstream - C++
как работают данные файловые операции, объясните пожалуйста куда происходит запись ена жёстком диске


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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