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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Lennadij
3 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 45
#1

Класс fstream - C++

24.10.2011, 18:53. Просмотров 1357. Ответов 12
Метки нет (Все метки)

Дан файл, содержащий несколько строк. В новый файл переписать строки данного, вставляя символ ‘!’ после каждой строки, содержащей не более n символов. Если строка заканчивается знаком препинания заменить его на символ ‘!’.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 18:53     Класс fstream
Посмотрите здесь:

C++ fstream::setbuf
Хитрый fstream C++
fstream непонятка C++
C++ Класс fstream
C++ fstream с++
C++ fstream
C++ fstream
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.10.2011, 19:03     Класс fstream #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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <string>
#include <list>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <iterator>
#include <utility>
#include <cctype>
#include <conio.h>
 
#define sumbol '!'
 
struct change :
    public std::unary_function<void, std::string>
{
    void operator() (std::string& s) const
    {
        if (ispunct(s.back()))
            s.back() = sumbol;
        else
            s.append(1, sumbol);
    }
};
 
int main()
{
    std::string file_name;
    std::list<std::string> text;
 
    std::cout << "Enter the file name" << std::endl;
    std::cin >> file_name;
 
    std::fstream file(file_name, std::ios_base::in | std::ios_base::_Nocreate);
    if (file.fail())
    {
        std::cout << "Bad file name" << std::endl;
        _getch();
        return EXIT_FAILURE;
    }
 
    std::string sentence;
    while (file)
    {
        std::getline(file, sentence);
        text.push_back(sentence);
    }
 
    std::for_each(text.begin(), text.end(), change());
 
    std::copy(text.begin(), text.end(),
        std::ostream_iterator<std::string>(std::cout, "\n"));
 
    _getch();
    return EXIT_SUCCESS;
}
Lennadij
3 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 45
24.10.2011, 19:10  [ТС]     Класс fstream #3
а можно как то пояснить?
sandye51
программист С++
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.10.2011, 21:01     Класс fstream #4
Цитата Сообщение от Lennadij Посмотреть сообщение
а можно как то пояснить?
неблагодарным - нельзя
Lennadij
3 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 45
24.10.2011, 21:10  [ТС]     Класс fstream #5
ну и ладно, сама как нибудь разберусь: все равно прогу по своему буду писать
sandye51
24.10.2011, 21:11
  #6

Не по теме:

ахаха, наивная

Lennadij
3 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 45
24.10.2011, 21:14  [ТС]     Класс fstream #7
ой-ой-ой
Revol'veR
23 / 23 / 2
Регистрация: 05.11.2010
Сообщений: 134
24.10.2011, 23:18     Класс fstream #8
Цитата Сообщение от Lennadij Посмотреть сообщение
а можно как то пояснить?
В помощь Великий гугл! Гугл знает всё
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.10.2011, 05:49     Класс fstream #9
добавляет символ ! в начало строк заданной длины
Вложения
Тип файла: zip lines_bang.zip (693 байт, 17 просмотров)
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
29.10.2011, 21:02     Класс fstream #10
Здравствуйте! Нужно считать данные из файла, в котором есть пустые строки. На выходе получаем заполненный вектор списков. Как пропустить пустые строки при использовании ifstream, чтобы получилось три списка?

78
78.2471
80.261
86.1613

78
78.2471
79.9545
83.2786
84.8222
86.6739
89

78
80.261
80.9116
83.2786
84.3941
84.8222
86.1613
89
Добавлено через 9 минут
Решено.

accept, спасибо, ваш код меня навел на мысль. Пустую строку теперь могу отслеживать.

C++
1
2
3
4
5
6
7
8
ifstream openData;
string curr;
openData.open(openLog->FileName.c_str(), ios::in);
 
while (getline(openData, curr))
    if (curr.length() == 0)
        ShowMessage("Empty!");
openData.close();
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.10.2011, 08:20     Класс fstream #11
Цитата Сообщение от Red Planet
Как пропустить пустые строки
C++
1
2
    if (s[0] == '\0')
        ;
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
30.10.2011, 22:58     Класс fstream #12
С задачей, для которой нужно считать данные, не получается. Есть вектор списков, в него и нужно считать. Если встречаем пустую строку, то начинаем заполнять следующий список.

В файле сначала идет поле a объекта класса X, через пробел следует поле b.

Файл.
56 34
78 22
3 9

3 7
89 55

1 5
7 77
Код.
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 <vcl>
#include <list>
#include <vector>
#include <iostream>
#include <fstream>
 
using namespace std;
 
class X {
    public: X(int aa = 1, int bb = 1) : a(aa), b(bb) {}
            int a, b;
};
 
int main() {
    vector< list<X> > xl(3, list<X>());
    ifstream ifs;
    string curr;
    ifs.open("file.txt", ios::in);
 
    for (int i = 0; i < xl.size(); ) {
        X temp;
        ifs >> temp.a >> temp.b;
        xl[i].push_back(temp);
        // сюда нужно вставить условие:
        // if (пустая строка) ++i;
    }
 
    ifs.close();
 
    for (int i = 0; i < xl.size(); ++i) {
        cout << i+1 << " element." << endl;
        for (list<X>::iterator it = xl[i].begin(); it != xl[i].end(); ++it)
            cout << it->a << " " << it->b << endl;
        cout << endl;
    }
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2011, 03:27     Класс fstream
Еще ссылки по теме:

<fstream> C++
C++ fstream
fstream и for C++
Ошибка с fstream C++
C++ Работа с fstream

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

Или воспользуйтесь поиском по форуму:
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.10.2011, 03:27     Класс fstream #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s1 = "abc", s2;
    
    cout << s1.empty() << endl;
    cout << s2.empty() << endl;
    
    return 0;
}
Код
[guest@localhost tests]$ .iso++ t.cpp -o t
[guest@localhost tests]$ ./t
0
1
[guest@localhost tests]$
Добавлено через 3 минуты
Цитата Сообщение от Red Planet
C++
1
ifs.open("file.txt", ios::in);
это уже поток ввода, там не нужно in

при считывании используй string, getline() и stringstream
Yandex
Объявления
31.10.2011, 03:27     Класс fstream
Ответ Создать тему
Опции темы

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