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

Вопрос по работе с файлами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Передача файлового потока как параметр-ссылка http://www.cyberforum.ru/cpp-beginners/thread154724.html
Как привести в реальность эту конструкцию? VS6 после ifstream fin ("test"); res = wordsearch (fin); выдавала ошибку.
C++ какие кгиги по С++ прочитали (хотя бы полистали) лично Вы? какие кгиги по С++ прочитали (хотя бы полистали) лично Вы? http://www.cyberforum.ru/cpp-beginners/thread154721.html
C++ Сравнивание указателей
Нужно подсчитать количество символов до определенной позиции, включительно, указатель на которую - begin_symbol начало подсчета с позиции file_txt_ptr Можно сделать так? indx = 1; // 0 или 1 while ( (file_txt_ptr - indx ) != (begin_symbol - 1) ) ++indx; В смысле корректно ли с равнивать с ячейкой памяти, стоящей перед первым символом массива(т.е. begin_symbol - 1)?
Определить, сколько в файле имеется слов, состоящих из одного, двух, трех символов C++
Дан символьный файл f. Считая что кол-во символов в слове не превосходит двадцати: а) определить, сколько в файле f имеется слов, состоящих из одного, двух, трех и т.д. символов; б) получить гистограмму (столбчатую диаграмму) длин всех слов файла f; в) определить кол-вослов в файле f.
C++ Определить число вхождений в последовательность s1,..., sn группы букв abc http://www.cyberforum.ru/cpp-beginners/thread154642.html
Даны натуральное число n,символы s1,...,sn. Определить число вхождений в последовательность s1,..., sn группы букв abc.
C++ определение классов и методов Доброго времени суток! Изучаю язык не долго, самостоятельно и есть проблемка - не могу понять, как определяются методы классов( в VB, AS все просто - метод определялся внутри описания класса, а тут жуть) - в классе опред переменные и функции (вернее , я так понял, просто обьявляются), а описываются где то в программе. просто прошу толково обьяснить эту тему (не могу понять, то ли лыжи не едут,... подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
20.07.2010, 21:55     Вопрос по работе с файлами

Не по теме:

Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
а почему начального условия в цикле нет О.о
ну да...



Добавлено через 36 минут
Почему так?
Даже и не знаю... Есть одна идейка.
Есть два перегруженных метода seekg():
C++
1
2
3
4
5
6
7
basic_istream<Elem, Tr>& seekg(
    pos_type pos
);
basic_istream<Elem, Tr>& seekg(
    off_type off,
    ios_base::seekdir way
);
Ты используешь второй метод: seekg(off_type off, ios_base::seekdir way). Вот что по этому поводу говорит microsoft:
Do not use the second member function with text files, because Standard C++ does not support relative seeks in text files.
- т.е. не использовать вторую функцию-член с текстовыми файлами, потому что Standard C++ не поддерживает относительный поиск в текстовых файлах.

Добавлено через 53 минуты
Странно, в книжке у Эккеля используется относительный поиск в текстовых файлах...

Добавлено через 4 минуты
Кажется, я понял, что к чему. Курсор в потоках указывает на следующий элемент, который может быть прочитан. Т.е., после записи в цикле последнего символа (символ пробела), курсор указывает на позицию за этим символом. Значит, относительное смещение -1 от конца (или, как в данном случае, текущей позиции курсора) файла будет указывать на символ пробела, а смещение -1 на символ 'z'. Поэтому и нужна была эта запись:
C++
1
i-=2;
PS. Это все мои домыслы, могу и ошибаться

Добавлено через 1 минуту
Немного переделал твой пример, так чтобы от переменной i можно было избавиться:
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
#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    std::string filename("reverse.txt");
    std::fstream io(filename.c_str(), std::ios::in | std::ios::out | std::ios::trunc);
 
    if (!io)
    {
        std::cout << "Error opening file \"" << filename << "\"" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
 
    char ch;
 
    for (ch = 'a'; ch <= 'z'; ch++)
            io << ch << ' ';
    
    io.seekg(-2, std::ios::cur);
    do
    {
        io.get(ch);
        std::cout << ch;
        io.seekg(-2, std::ios::cur);
    }
    while(io.tellg() >= 0);
    std::cout << std::endl;
    system("pause");
    return EXIT_SUCCESS;
}
 
Текущее время: 11:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru