Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 2
Регистрация: 21.03.2018
Сообщений: 26

Повторяющиеся символы в строке

21.03.2018, 23:05. Показов 3495. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать программу, которая вводит текст, заменяет в нем стоящие подряд одинаковые символы одним символом и подсчитывает количество таких замен.
В некотором роде она работает. То есть, если вбить к примеру "срр", то она выдаст "ср". Но если вводить, к примеру, "orange cool", то выдает "orange coo". Проблема, как я понимаю, в алгоритме. Но понятия не имею, как исправить. Помогите, плес.
Вот код:
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
#include <iostream>
#include <string>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    int i,m, k, leng;
    char z;
    char quote[100];
    do
    {
        m = 0;
        cout << "Enter text\n";
        cin.getline(quote,100,'\n');             
        k= strlen(quote);
        quote[k+1] = '\n';
        if (k<100)
        {
            for (i = 0; i < k; i++)
            {   
                if (quote[i] == quote[i+1])
                {
                    m++;
                    for (int j = i; j < k-i-1; j++)
                        quote[j] = quote[j + 1];
                    k--;
                }
            }
 
            for (i = 0; i < k; i++)
            {
                cout.put(quote[i]);
            }
        }
        else 
            cout << "вы ввели неправильные данные, введите заново\n";
        cout <<endl  <<m ;
        cout << "\n Press y to repeat";;
        (cin >> z).get();
    }
    while (z == 'y');  
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2018, 23:05
Ответы с готовыми решениями:

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

Исключить повторяющиеся символы в строке
Исключит повторяющиеся символы в строке

Шаблонная функция которая в «строке» заменяет все повторяющиеся подряд символы
Помогите выполнить задачу. В произвольной «строке» заменить все повторяющиеся подряд символы. «Строка» и символ – произвольного типа.

4
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.03.2018, 03:34
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
#include <iostream>
 
void process(std::string inp) {
    int counter = 0;
    std::string new_string;
    for (char c: inp) {
        if (new_string.back() != c)
            new_string += c;
        else
            counter++;
    }
    std::cout << inp << " --> " << new_string << " --> " << counter << " replacement(s)" << std::endl;
}
 
int main() {
 
    std::string s1{"cpp"};
    std::string s2{"orange cool"};
 
    process(s1);
    process(s2);
 
    return 0;
}
0
 Аватар для igorrr37
2882 / 2029 / 992
Регистрация: 21.12.2010
Сообщений: 3,782
Записей в блоге: 9
22.03.2018, 08:45
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <clocale>
#include <regex>
#include <string>
 
 
int main()
{
    setlocale(LC_CTYPE, "rus");
    std::string str("coolll впппркк,,, SSss");
    std::regex reg("(.)\\1+");
    std::smatch mr;
    int cnt = 0;
    for (auto ib(str.cbegin()); std::regex_search(ib, str.cend(), mr, reg); ib = str.cbegin() + mr.position(0) + 1)
    {
        str.replace(mr[0].first, mr[0].second, mr[1]);
        ++cnt;
    }
    std::cout << str << '\n' << cnt << std::endl;
}
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
25.03.2018, 15:51
vladosekcompact, здравствуйте! Вот еще вариант:

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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int k;
    bool flag;
    string str;
    cout << "Enter a text [ENG]:\n";
    getline(cin, str);
    k = 0;
    for (int i = 0; i < str.size(); i++)
    {
        if (i + 1 < str.size() && str[i+1] == str[i])
        {
            i--;
            str.erase(i + 1, 1);
            flag = true;
        }
        else
        {
            if (flag)
                k++;
            flag = false;
        }
    }
    cout << "Target string:\n" << str << "\n";
    cout << "Target quantity: " << k << "\n";
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 12.04.2019
Сообщений: 11
09.10.2019, 12:11
Подскажите, пожалуйста, как сделать корректный вывод результатов замены на русском языке? Например, вводится "шаар", а выводится непонятный набор символов вместо "шар".
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
#include <iostream>
#include <clocale>
#include <regex>
#include <string>
 
using namespace std;
 
int main()
{
    string a;
    setlocale(LC_CTYPE, "rus");
    cout << "Введите текст:  ";
    getline(cin, a);
    cin >> a;
    
    std::string str(a);
    std::regex reg("(.)\\1+");
    std::smatch mr;
    int cnt = 0;
    for (auto ib(str.cbegin()); std::regex_search(ib, str.cend(), mr, reg); ib = str.cbegin() + mr.position(0) + 1)
    {
        str.replace(mr[0].first, mr[0].second, mr[1]);
        ++cnt;
    }
    
    std::cout << str << '\n' << cnt << std::endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2019, 12:11
Помогаю со студенческими работами здесь

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

Убрать повторяющиеся символы из строки
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;string&quot; using namespace std; string a; bool used; int _tmain(int argc,...

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

Найти повторяющиеся символы в массиве
Доброго времени суток! Не могли бы подсказать как решить такую задачу. Дана последовательность символов, надо найти какой символ сколько...

Найти уникальные и повторяющиеся символы
пример: ввод символов : abcab слово: abc вывод должен быть такой: 00100 пожалуйста помогите,как это сделать?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru