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

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

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

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

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

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

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

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

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

4
zss
Модератор
Эксперт С++
8073 / 7216 / 4496
Регистрация: 18.12.2011
Сообщений: 19,081
Завершенные тесты: 1
01.03.2018, 21:24 2
См. ссылки внизу страницы
0
Даценд
Модератор
Эксперт .NET
4529 / 4169 / 2738
Регистрация: 20.04.2015
Сообщений: 7,575
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
igorrr37
2033 / 1599 / 798
Регистрация: 21.12.2010
Сообщений: 2,751
Записей в блоге: 10
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
New man
275 / 193 / 69
Регистрация: 23.05.2011
Сообщений: 906
Завершенные тесты: 5
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
02.03.2018, 12:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2018, 12:50

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

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

Каждую группу символов one заменить на three
Каждую группу символов one заменить на three. Попробовал написать, пока что использовал точку а...


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

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

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