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

Заменить последовательность подряд идущих пробелов одним пробелом

29.12.2017, 13:26. Просмотров 844. Ответов 2
Метки нет (Все метки)

Составьте программу, переписывающую текстовый файл с заменой каждой последовательности подряд идущих пробелов одним пробелом и удалением всех пробелов, непосредственно предшествующих символам конца строки и конца файла. Имена файла-источника и файла-получателя выбирает пользователь.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2017, 13:26
Ответы с готовыми решениями:

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

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

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

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

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

2
Геомеханик
798 / 602 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
29.12.2017, 17:49 2
Лучший ответ Сообщение было отмечено Smilelan как решение

Решение

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <fstream>
#include <string>
void trim_rep_spaces(std::string::size_type& p, std::string& s);
void output_trim(std::ostream& _out, std::istream& _in);
 
int main(void){
    std::string s_in, s_out;
 
    std::cout << "src file: ";
    std::getline(std::cin, s_in);
    std::cin.sync();
 
    std::cout << "dst file: ";
    std::getline(std::cin, s_out);
    std::cin.sync();
 
    std::ifstream fin(s_in.c_str());
    if(!fin.is_open())
        return 1;
 
    std::ofstream fout(s_out.c_str());
    if(!fout.is_open()){
        fin.close();
        return 1;
    }
    output_trim(fout, fin);
    fout.close();
    fin.close();
    return 0;
}
 
void output_trim(std::ostream& _out, std::istream& _in){
    std::string s;
    std::string::size_type p = std::string::npos;
    while(std::getline(_in, s)){
        if(p != std::string::npos)
            _out << std::endl;
 
        trim_rep_spaces(p, s);
        if(p > 0)
            _out.write(&s[0], p);
    }
 
    if(!_out.fail())
        _out.flush();
}
 
void trim_rep_spaces(std::string::size_type& p, std::string& s){
    std::string::size_type k, j = 0, i = 0, n = s.length();
    while((i < n) && (s[i] == ' '))
        ++i;
 
    for(; i < n; ){
        if(s[i] != ' ')
            s[j++] = s[i++];
        else {
            k = i + 1;
            while((k < n) && (s[k] == ' '))
                ++k;
 
            s[j++] = s[i];
            i = k;
        }
    }
 
    while((j > 0) && (s[j - 1] == ' '))
        --j;
 
    if((n > 0 && !j) && (s[j] == ' '))
        p = 0;
    else
        p = j;
}
0
shadow1337
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
03.06.2018, 22:57 3
Геомеханик, не могли бы вы переделать этот код так, чтобы я мог задать файл в самой программе в формате file.txt?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2018, 22:57

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

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

О передаче массива в функцию, которая заменяет серию пробелов одним пробелом
Нужно написать функцию, чтоб она получала символьный массив L, и возвращала массив Lsource в...


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

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

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