20 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 792
1

Считать текст из файла в строку типа std::string (файловый ввод/вывод)

06.02.2016, 14:59. Показов 11804. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем здравия, непонимание работы с файлами побуждает меня беспокоить вас.
Программа копирует с файла текст, и из-за абзацев текст разбивается на несколько строк и в строке остается только последняя его(текста) часть. В голове только известный роман Чернышевского. Помогите.
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    string line;
    ifstream myfile("example.txt");
    if (myfile.is_open())
    {
        while (!myfile.eof())
        {
            getline(myfile, line);
            cout << line << endl << endl;
        }
        myfile.close();
    }
    else
        cout << " Unable to open file." << endl;
    cout << line << endl << endl;
 
    system("pause");
    return 0;
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2016, 14:59
Ответы с готовыми решениями:

Ввод-вывод: Не могу ввести строку в std::string!
Ничего не понимаю! Должно работать: void Engine::CreateNewNote() { std::cout &lt;&lt; &quot;Title: &quot;;...

Как текст из заданного файла присвоить переменной типа std::string?
Здравствуйте, у меня есть файл с текстом, нужно этот текст присвоить переменной string, как это...

Считать данные из текстового файла по условию и записать их в другой текстовый файл (файловый ввод/вывод)
Здравствуйте! Очень прошу о помощи! Суть задания - дан текстовый файл, нужно считать его и записать...

Считать матрицу из файла, найти количество строк, содержащих хотя бы один ноль (файловый ввод/вывод)
Собственно код прозрачный , но не работает. Должен открыть фаил с матрицей, где записаны 16 чисел...

11
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
06.02.2016, 15:05 2
gogaloh, покажи скрин как было, как стало.
0
20 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 792
06.02.2016, 15:15  [ТС] 3
_Valera_, не умею "показывать скрин".
У меня в 21 строке cout<<-она выводит только последнюю часть текста. А мне надо весь текст обрабатывать.
0
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
06.02.2016, 15:21 4
Цитата Сообщение от gogaloh Посмотреть сообщение
У меня в 21 строке cout<<-она выводит только последнюю часть текста. А мне надо весь текст обрабатывать.
это ближе к делу.

Цитата Сообщение от gogaloh Посмотреть сообщение
C++
1
2
3
4
5
while (!myfile.eof())
* * * * {
* * * * * * getline(myfile, line);
* * * * * * cout << line << endl << endl;
* * * * }
тут можно например каждую строку поместить в список и выводить потом список строк.
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
06.02.2016, 17:52 5
Цитата Сообщение от gogaloh Посмотреть сообщение
непонимание работы с файлами побуждает меня беспокоить вас
Темы адекватно именовать научись, любезность окажи, о форумчанин!

Цитата Сообщение от gogaloh Посмотреть сообщение
не умею "показывать скрин".
Скриншоты делать не умеете? Жмёте кнопку PrintScreen (у меня на клавиатуре она обозвана как "Prt Sc"), потом открываете Paint, жмёте "вставить" или CTRL+V, сохраняете полученный рисунок и прикрепляете файл с рисунком к Вашему сообщению на форуме.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
06.02.2016, 18:06 6
Цитата Сообщение от gogaloh Посмотреть сообщение
А мне надо весь текст обрабатывать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    #include <sstream>
    //...
    
    string line;
    ifstream myfile("example.txt");
    if (myfile.is_open())
    {
        stringstream ss;
        ss << myfile.rdbuf();
        line = ss.str();
        myfile.close();
        cout << line << endl << endl;
    }
    else
        cout << " Unable to open file." << endl;
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
06.02.2016, 18:59 7
gogaloh,
и в строке остается только последняя его(текста) часть
Ну это очевидно, ведь вы считываете в строку 1 строку из файла, потом выводите, а потом эту строку очищаете и копируете следующую и т.д. Поэтому остаётся только последняя строка, можно завести ещё одну строку/вектор строк/etc.
0
20 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 792
06.02.2016, 21:02  [ТС] 8
Цитата Сообщение от makfak Посмотреть сообщение
можно завести ещё одну строку/вектор строк/etc.
Пишу программу, строка проходит по нескольким функциям. Думаю, что половину работы уже выполнил, и тут только обнаружил, что не заметил проблему в самом начале.
Подскажите, возможно ли текст из файла поместить в вектор, а потом содержимое вектора поместить в единую строку?

Добавлено через 18 минут
nd2,
Цитата Сообщение от nd2 Посмотреть сообщение
rdbuf();
Цитата Сообщение от nd2 Посмотреть сообщение
stringstream ss;
Именно это я и хотел, но эти функции вижу впервые. Страуструп знал, что я столкнусь с такой проблемой?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
06.02.2016, 21:12 9
gogaloh,
Подскажите, возможно ли текст из файла поместить в вектор, а потом содержимое вектора поместить в единую строку?
C++
1
2
3
4
5
6
7
8
9
10
std::vector<string> vec;
std::string str;
while(!myfile.eof()) {
    std::getline(myfile,str);
    vec.push_back(str);
}
str = "";
for(const auto& i : vec) {
    str += i + '\n';
}
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
06.02.2016, 23:34 10
Цитата Сообщение от gogaloh Посмотреть сообщение
Именно это я и хотел, но эти функции вижу впервые.
Всё когда-то впервые...
Цитата Сообщение от gogaloh Посмотреть сообщение
Подскажите, возможно ли текст из файла поместить в вектор, а потом содержимое вектора поместить в единую строку?
Можно сразу в единую строку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    string line;
    ifstream myfile("example.txt");
    if (myfile.is_open())
    {
        string temp;
        while (getline(myfile, temp))
        {
            line += temp;
            if (!myfile.eof())
                line += '\n';
        }
        myfile.close();
        cout << line << endl;
    }
    else
        cout << " Unable to open file." << endl;
1
_Ivana
07.02.2016, 01:19
  #11

Не по теме:

Плюс за один только слог изложения :)

0
3 / 3 / 4
Регистрация: 03.07.2014
Сообщений: 19
07.02.2016, 05:02 12
Можно, так же, применить метод "через шоколадный глаз":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string>
 
using namespace std;
 
int main()
{
    FILE* file = fopen("example.txt");
    fseek(file,0,SEEK_END);
    size_t size = ftell(file);
    fseek(file,0,SEEK_SET);
    char *buf = new char[size+1];
    fread(buf,1,size,file);
    string text = buf;
    delete[] buf;
    return 0;
}
0
07.02.2016, 05:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2016, 05:02
Помогаю со студенческими работами здесь

Как скопировать строку типа std::string в другую строку такого же типа?
Хотел скопировать строку #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using...

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и...

Как совместить строку типа String, имеющуюся в коде и функцию, принимающую std::string ?
Доброго времен суток)) У меня такая проблема: есть строка типа String^ , а функция принимает...

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод)
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru