С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
#1

Удаление повторяющихся символов - C++

21.01.2012, 15:24. Просмотров 2578. Ответов 4
Метки нет (Все метки)

из последовательности символов удалить самую большую из одинаковых элементов

допустим есть строка aabbbbzcc, на выходе aazcc
abczzhhklllllllm на выходе abczzhhkm

как ни кручу не могу реализовать задачу...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2012, 15:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление повторяющихся символов (C++):

Удаление повторяющихся символов - C++
Задача банальна. Удалить повторяющиеся символы в строке. В интернете шарил, предложенные варианты слишком сложные и непонятные. Язык си,...

Удаление повторяющихся символов - C++
Есть строка символов, я её обрабатываю, удаляю слово с повторяющимися символами,дело в том что заодно удаляются и цифровые слова, 55 44 33...

Удаление повторяющихся символов массива - C++
Надо сделать так что бы повторяющиеся символы массива удалялись, а сам массив сдвигался.

Удаление из строки повторяющихся символов - C++
Например Ввод: ABBGBAZ Вывод: ABGZ

Удаление повторяющихся символов из строки - C++
Необходимо написать функцию delete_repeats, которая удаляет все повторяюшиеся символы из строки. например: Only three more lessons...

Поиск повторяющихся символов в тексте и удаление таких строк - C++
нужен готовый .exe. Есть .txt файлы, в нем нужно по удалять строчки - где какой либо символ повторяется больше 2, 3 раз и т.д. пример:...

4
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
21.01.2012, 15:43 #2
Это удаляем повторы:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string s( "abczzhhklllllllm" );
    s.resize( std::unique( s.begin(), s.end() ) - s.begin() );
    std::cout << s << std::endl;
    return 0;
}
Добавлено через 9 минут
Вот работает, может, не совсем оптимально:
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 <map>
#include <algorithm>
 
int main()
{
    std::string s( "abczzhhklllllllm" );
    std::map < char, unsigned int > m;
    
    for( size_t index = 0; index < s.length(); m[ s[ index ] ]++, index++ );
 
    char char_max = m.begin() -> first;
 
    for( std::map < char, unsigned int >::iterator it = m.begin(); it != m.end(); ++it )
        if ( it -> second > m[ char_max ] )
            char_max = it -> first;
 
    s.erase( std::remove( s.begin(), s.end(), char_max ), s.end() ); 
    
    std::cout << s << std::endl;
    return 0;
}
0
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
21.01.2012, 15:45 #3
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(void)
{
    char *s = "abdddccccdddddde";
    int pos = 0, poscur = 0, i, max = 0, count = 1;
    for (i = 0; i < strlen(s) - 1; i++){
        if (s[i+1] == s[i]) {
            if (count == 1)
                poscur = i;
            count++;
        }
        else
            count = 1;
        if (count > max) {
            max = count;
            pos = poscur;
        }
    }
    for (i = pos; i < pos+max; i++){
        if (i == strlen(s)-1)
            break;
        s[i] = s[i+max];
    }
    s[i] = '\0';
    return 0;
}
0
fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
21.01.2012, 16:01  [ТС] #4
Mиxaил, спасибо, но использовать функции для работы со строками нельзя,
только работа с массивом символов)
megastriker,
щас попробуем)
кстати тоже strlen присутствует
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
21.01.2012, 16:12 #5
fruktik, вместо strlen() можно написать sizeof( s ) - 1, если строку s ( массив символов ) вводить через gets( s ).
0
21.01.2012, 16:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 16:12
Привет! Вот еще темы с ответами:

Удаление повторяющихся точек - C++
в общем, делаю курсовик, вот его задание: &quot;Даны N точек на плоскости. Для всех треугольников, образуемых любыми тремя точками,...

Удаление повторяющихся чисел - C++
вот мой код vector&lt;int&gt; array; ifstream f(&quot;test.txt&quot;); while (!f.eof()) { int tmp; f &gt;&gt; tmp; array.push_back(tmp); ...

Удаление повторяющихся элементов в векторе - C++
Нужно перегрузить унарный оператор ~ что бы он удалял повторяющиеся элементы в векторе vector&amp; operator ~ () { if (count &gt; 0) ...

Удаление из массива повторяющихся элементов - C++
Значит,задача : удалить повторы в массиве, оставив по одному вхождению! моя идея. если 2 компонента, стоящие рядом, равны друг другу,...


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

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

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