Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
21.01.2012, 15:24     Удаление повторяющихся символов #1
из последовательности символов удалить самую большую из одинаковых элементов

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

как ни кручу не могу реализовать задачу...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 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;
}
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;
}
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
21.01.2012, 16:01  [ТС]     Удаление повторяющихся символов #4
Mиxaил, спасибо, но использовать функции для работы со строками нельзя,
только работа с массивом символов)
megastriker,
щас попробуем)
кстати тоже strlen присутствует
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
21.01.2012, 16:12     Удаление повторяющихся символов #5
fruktik, вместо strlen() можно написать sizeof( s ) - 1, если строку s ( массив символов ) вводить через gets( s ).
Yandex
Объявления
21.01.2012, 16:12     Удаление повторяющихся символов
Ответ Создать тему
Опции темы

Текущее время: 17:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru