Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 15.02.2018
Сообщений: 14
1

Заменить каждую группу внутренних пробелов одним пробелом

01.03.2018, 20:44. Просмотров 1775. Ответов 4
Метки нет (Все метки)

Дана строка слов, разделенных пробелами. Сформируйте но-
вую строку, заменив каждую группу внутренних пробелов
одним пробелом. Оставьте в строке только первые
вхождения слов. Определите самое короткое слово.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2018, 20:44
Ответы с готовыми решениями:

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

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

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

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

4
Модератор
Эксперт С++
10228 / 8556 / 5188
Регистрация: 18.12.2011
Сообщений: 22,878
01.03.2018, 21:24 2
См. ссылки внизу страницы
0
Модератор
Эксперт .NET
5438 / 4586 / 2897
Регистрация: 20.04.2015
Сообщений: 8,203
01.03.2018, 21:43 3
Лучший ответ Сообщение было отмечено Andrepanda как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
    std::string s = "zzzz qqqqq    eeeee fff   dd    aaaa fff eeeee   sss sss          aaa", word;
    std::cout << s << std::endl;
    std::istringstream in(s);
    std::ostringstream out;
    std::vector<std::string> vec;
    while (in >> word)
        if (std::find(vec.begin(), vec.end(), word) == vec.end())
            vec.push_back(word);
    std::string min_len_word = *std::min_element(vec.begin(), vec.end(), [](std::string &s1, std::string &s2) {return s1.size() < s2.size(); });
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(out, " "));
    std::string s2 = out.str();
    std::cout << s2 << std::endl;
    std::cout << "Min length word: " << min_len_word << std::endl;
    return 0;
}
1
2224 / 1728 / 864
Регистрация: 21.12.2010
Сообщений: 3,073
Записей в блоге: 11
02.03.2018, 11:39 4
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 <string>
#include <regex>
#include <set>
#include <climits>
using namespace std::string_literals;
 
int main() 
{
    std::string str("    zzzz qqqqq    eeeee fff   d    aaaa fff eeeee   sss sss          aaa    "), sres, suf; 
    std::regex reg("( *)([[:alpha:]]+)( *)");
    int minLen = INT_MAX;
    std::set<std::string> ss;
    for (std::sregex_iterator ib(str.begin(), str.end(), reg), ie; ib != ie; ++ib)
    {
        minLen = (ib->length(2) < minLen? ib->length(2) : minLen);
        if (ss.emplace(ib->str(2)).second)
        {
            sres += ib->format("$1$2"s + ' ');
        }
        suf = ib->str(3);
    }
    sres.replace(sres.size() - 1, 1, suf);
    std::cout << sres << ".\n" << minLen << std::endl;
}
0
301 / 213 / 74
Регистрация: 23.05.2011
Сообщений: 970
02.03.2018, 12:50 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <algorithm>
 
std::string remove_big_spaces(std::string arg)
{
    auto new_end = std::remove_if(arg.begin()+1, arg.end(), [](const char& v)
       {
            return v==' ' && ' '==*(&v-1);
        }
    );
    return std::string(arg.begin(),new_end);
}
 
int main() 
{
    std::string str("    zzzz qqqqq    eeeee fff   d    aaaa fff eeeee   sss sss          aaa    "), sres, suf; 
    std::cout<<str<<"\n";
    std::cout<<remove_big_spaces(str);
}
Или так вообще(чуть производительнее, по идее).
C++
1
2
3
4
5
6
7
8
9
10
11
std::string remove_big_spaces(std::string arg)
{
    arg.erase(
        std::remove_if(arg.begin()+1, arg.end(), [](const char& v)
           {
                return v==' ' && ' '==*(&v-1);
            }
        ),
        arg.end());
    return arg;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2018, 12:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

В массиве каждую группу рядом стоящих одинаковых элементов заменить одним и тем же значением
в массиве целых чисел каждую группу рядом стоящих одинаковых элементов заменить на одним и тем же...

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

Каждую группу пробелов заменить одним пробелом
3) Дан текст, состоящий из слов, разделённых пробелами. Каждую группу пробелов заменить одним...


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

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

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