С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 42

Убрать лишние пробелы

10.12.2019, 01:12. Показов 1536. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изменить текст чтобы слова разделялись ровно одним пробелом(текст должен быть в текстовом файле исходный и изменённый)

Добавлено через 16 минут
Я смог только сделать , чтоб эти пробелы удалялись , но без файла
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
#include <stdio.h>
void compress(char* str)
{
    int i = 0, j = 0, k = 0, l = 0;
    while (str[i] == ' ')
        i++;
    while (1)
    {
        while (str[j] != ' ' && str[j] != '\0')
            j++;
        if (str[j] == '\0') break;
        k = j;
        while (str[k] == ' ') k++;
        l = j;
        do
        {
            str[l] = str[k];
            l++; k++;
        } while (str[k - 1] != '\0');
    }
}
int main()
{
    char str[100];
    printf("Enter string:\n");
    gets(str);
    compress(str);
    printf("After compressing:\n");
    puts(str);
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.12.2019, 01:12
Ответы с готовыми решениями:

Убрать лишние пробелы
отформотировать строку 1)убрать все лишние пробелы 2) убрать 1 пробел после знака препинания ПЕРВУЮ ЗАДАЧУ РЕШИЛ . ...

Убрать лишние пробелы
Здравствуйте, помоги пожалуйста, найти ошибку в коде. (Вводится ненормированная строка, у которой может быть более одного пробела между...

Убрать лишние пробелы в строке
дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так чтобы между словами оставался один пробел

9
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
10.12.2019, 01:56
Лучший ответ Сообщение было отмечено FCX как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <regex>
 
int main()
{
    std::ifstream is("input.txt");
    std::ofstream os("output.txt");
    if (!is.is_open() || !os.is_open()) return 1;
    std::stringstream ss;
 
    ss << is.rdbuf();
    os << std::regex_replace(ss.str(), std::regex(" +"), " ");
 
    is.close(); os.close();
    return 0;
}
2
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
10.12.2019, 02:10
nalbe666, не пугайте человека тяжёлыми плюсами. По ходу, ТС на Сях пишет.

FCX, попробуйте это:
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
#include <stdio.h>
 
void compress(char* str)
{
    char* src = str, * dst = str;
    int space = 1;
    while (*src) {
        if (space && *src == ' ') {
            ++src;
            continue;
        }
        if (space)
            space = 0;
        if (*src == ' ')
            space = 1;
        *dst++ = *src++;
    }
    if (*dst == ' ')
        --dst;
    *dst = '\0';
}
 
#define BUFLEN 1024
 
const char infile[] = "input.txt";
const char outfile[] = "output.txt";
 
char str[BUFLEN];
 
int main()
{
    FILE* fin, * fout;
    if ((fin = fopen(infile, "rt")) == NULL)
        return 1;
    if ((fout = fopen(outfile, "wt")) == NULL) {
        fclose(fin);
        return 2;
    }
 
    while ((fgets(str, BUFLEN, fin)) != NULL) {
        compress(str);
        fputs(str, fout);
    }
 
    fclose(fout);
    fclose(fin);
 
    return 0;
}
4
0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 42
10.12.2019, 02:20  [ТС]
L0M, Если честно , то для меня и это больно умным кажется
C++
1
#define BUFLEN 1024
Что это такое? Объясните , если не трудно
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
10.12.2019, 02:35
FCX, это директива препроцессора. Подробности см. здесь.

В данном случае препроцессор перед компиляцией уберёт строку с директивой и заменит в тексте, идущим далее, все вхождения подстроки BUFLEN на подстроку 1024.
0
0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 42
10.12.2019, 03:38  [ТС]
nalbe666, А что значит эта строка?
C++
1
 if (!is.is_open() || !os.is_open()) return 1;
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
10.12.2019, 03:43
FCX, http://www.cplusplus.com/refer... m/is_open/
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
10.12.2019, 04:38
Цитата Сообщение от FCX Посмотреть сообщение
то для меня и это больно умным кажется
Собственно основной целью было показать как читать и записывать строки в файл. То, что вы просили.

Реализацию функции compress() можете безболезненно заменить на свою. Мне показалось, что моя реализация попроще.
0
0 / 0 / 0
Регистрация: 17.11.2022
Сообщений: 76
15.01.2023, 08:34
Подскажите пожалуйста, а как бы этот код выглядел на си?
Пытаюсь перевести, но программа ломается
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
15.01.2023, 10:02
Цитата Сообщение от Boiycha Посмотреть сообщение
а как бы этот код выглядел на си?
Код в 3 посте не хорошо вам ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2023, 10:02
Помогаю со студенческими работами здесь

В тексте убрать лишние пробелы и разделительные символы
1. Определить какие символы и сколько раз встречаются в тексте. Или 2. В тексте убрать лишние пробелы и разделительные символы,...

Убрать лишние(повторяющиеся) пробелы, и записать в файл
помоги, пожалуйста, доработать программу Надо убрать лишние(повторяющиеся) пробелы, и записать в файл using namespace std; int...

Как убрать в введенной строке лишние пробелы?
Например в питоне я сделал так. Разделил сплитом по пробелу и составил список полученных слов и потом собрал полученный список с помощью...

Убрать лишние пробелы, оставить по одному пробелу между слов
Помогите пожалуйста!!! Убрать лишние пробелы, оставить по одному пробелу между слов. (С++)

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru