Проблема со сохранением изменений в текстовый файл

226
18 декабря 2021, 08:40

Было задание, условие которого отредактировать текст, данный в текстовом документе, отредактированный текст сохранить в этот же документ. Так вот, может это глупый вопрос, но как сохранить отредактированный текст в текстовый документ?)

Вот мой код:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string RedactText(string s)
{
    for (int j = 0; j < s.length(); j++)
    {
        if (s[j] == '-' && s[j + 1] == '-')
        {
            s.replace(j, 2, " - ");
        }
        if (s[j] == ' ')
        {
            while (s[j + 1] == ' ') s.erase(j + 1, 1);
        }
        if (s[j] == '.' && s[j + 1] != ' ')
        {
            s.replace(j, 1, ". ");
        }
        else if (s[j] == ',' && s[j + 1] != ' ')
        {
            s.replace(j, 1, ", ");
        }
        else if (s[j] == ':' && s[j + 1] != ' ')
        {
            s.replace(j, 1, ": ");
        }
    }
    if (s[0] == ' ') s.erase(0, 1);
    if (s[s.length() - 1] == ' ') s.erase(s.length() - 1, 1);
    return s;
}
int main()
{
    setlocale(LC_ALL, "");
    fstream F("C:\\Это папка\\Бейсбол.txt", ios::in | ios::out);
    string a;
    while (getline(F, a))
    {
        a = RedactText(a);
        cout << a << endl;
    }
    F.close();
    system("pause");
}

Уже что только не пробовал, и ifstream + ofstream и просто fstream вводил, в лучшем случае текст просто не сохранялся. Что-то я явно делаю не так...

Answer 1

Самый простой способ:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
// RedactText code
int main()
{
    setlocale(LC_ALL, "");
    fstream F("C:\\Это папка\\Бейсбол.txt", ios_base::in);
    // Здесь нужна проверка на успешность открытия файла
    string a;
    vector<string> fileStrings;
    while (getline(F, a))
    {
        fileStrings.push_back(RedactText(a));
    }
    F.close();
    F.open("C:\\Это папка\\Бейсбол.txt", ios_base::out | ios_base::trunc);
    copy(fileStrings.begin(), fileStrings.end(), ostream_iterator<string>(F, "\n"));
    F.close();
    system("pause");
    return 0;
}
READ ALSO
Почему функция не прекращает работу по return [закрыт]

Почему функция не прекращает работу по return [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

86
Почему после некоторой операции одна из веток узла ссылается на саму себя?

Почему после некоторой операции одна из веток узла ссылается на саму себя?

Cтруктура node имеет в своих полях указатели на node

86
Как подключить .obj файл в QtCreator

Как подключить .obj файл в QtCreator

У меня есть скомпилированный из ассемблераobj файл с функцией

168
Проблема с потоками c++

Проблема с потоками c++

впервые работаю с потоками и возникла проблема в синхронизации

84