Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
shadow1337
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
1

В текстовом файле заменить все последовательности идущих подряд пробелов одним пробелом

03.06.2018, 17:41. Просмотров 953. Ответов 8
Метки нет (Все метки)

В текстовом файле заменить все последовательности идущих подряд пробелов
одним пробелом, т.е. "сжать" файл. Новый файл не создавать.

Уточнение: нужно именно создать текстовый файл в папке с проектом (пользуюсь Visual Studio), в нем заменить все последовательности пробелов на один пробел. Чтобы при выводило на экран файл с единичными пробелами.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2018, 17:41
Ответы с готовыми решениями:

Заменить последовательность подряд идущих пробелов одним пробелом
Составьте программу, переписывающую текстовый файл с заменой каждой последовательности подряд...

Последовательности следующих друг за другом пробелов заменить одним пробелом (т.е. удалить все пробелы, следующие непосредственно за пробелом)
Последовательности следующих друг за другом пробелов заменить одним пробелом (т.е. удалить все...

Заменить несколько подряд идущих пробелов одним
нужна программа какая заменяет несколько подряд идущих пробелов одним и выводит полученный...

Заменить несколько подряд идущих пробелов одним
Напишите программу, которая посимвольно читает из std::cin, пока не достигнет конца потока ввода, и...

Удалить группы пробелов, которыми начинается и заканчивается строка, а каждую внутреннюю группу пробелов заменить одним пробелом
Задана строка символов. Преобразовать эту строку следующим образом: удалить группы пробелов,...

8
nmcf
6527 / 5751 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
04.06.2018, 11:22 2
Лучший ответ Сообщение было отмечено shadow1337 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
ifstream ifs("t.txt");
stringstream ss;
ss << ifs.rdbuf();
ifs.close();
ofstream ofs("t.txt");
char a = '\0', b;
while (ss.get(b))
{
    if (b == ' ' && a == ' ') continue;
    ofs.put(b);
    a = b;
}
1
shadow1337
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
04.06.2018, 11:28  [ТС] 3
Мой код выглядит следующим образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    ifstream ifs("t.txt");
    stringstream ss;
    ss << ifs.rdbuf();
    ifs.close();
    ofstream ofs("t.txt");
    char a = '\0', b;
    while (ss.get(b))
    {
        if (b == ' ' && a == ' ') continue;
        ofs.put(b);
        a = b;
 
    }
}
Выдает следующие ошибки: строки 10 и 15: ss - недопустимый неполный тип и строка 11 << - недопустимый оператор, соответствующий этим операндам. Как исправить?
0
nmcf
6527 / 5751 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
04.06.2018, 11:30 4
<sstream> где?
0
04.06.2018, 11:30
shadow1337
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
04.06.2018, 11:34  [ТС] 5
Теперь работает. А не могли бы вы объяснить как работает программа? Может, добавить комментарии к строкам, или примерно своими словами.
0
nmcf
6527 / 5751 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
04.06.2018, 12:13 6
Что тут объяснять? Просто пропускает лишние пробелы.
0
shadow1337
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
05.06.2018, 01:17  [ТС] 7
Я, честно говоря, не силен в функциях, которые связаны с текстовыми файлами. В интернете тоже такие себе везде определения, не могу разобраться. Не могли бы вы все-таки прокомментировать строчки?
0
shadow1337
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
06.06.2018, 11:52  [ТС] 8
Подскажите, как это работает? Не понимаю условие

C++
1
2
3
4
5
6
7
 while (ss.get(b))
    {
        if (b == ' ' && a == ' ') continue;
        ofs.put(b);
        a = b;
 
    }
0
nmcf
6527 / 5751 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
06.06.2018, 11:58 9
Что тут понимать? a и b - это идущие друг за другом символы, b - текущий, a - предшествующий. И если они оба - пробелы, то запись в файл не выполняется.
1
06.06.2018, 11:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2018, 11:58

Заменить каждую группу внутренних пробелов одним пробелом
Дана строка слов, разделенных пробелами. Сформируйте но- вую строку, заменив каждую группу...

Удалить в строке все лишние пробелы, то есть серии подряд идущих пробелов заменить на одиночные пробелы
Я уже решал эту задачу с помощью циклов и символьных массивов, и выкладывал на этот форум , но я не...

Найти в текстовом файле все группы из одинаковых идущих подряд пустых строк или строк, содержащих только пробелы
Взываю к помощи Помогите решить задачу: Найти во входном файле все группы из одинаковых идущих...


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

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

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