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

Найти в строке string наиболее часто встречающуюся пару символов и заменить на один новый символ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в коде при использовании класов http://www.cyberforum.ru/cpp-beginners/thread162729.html
#include <iostream> #include <fstream> #include <time.h> #include <stdio.h> using namespace std; class Hello { int money, money_prize;; public: Hello()
C++ корректировка уже введенных пользователем данных Работаю в консоли. Пользователю выдаются показатели бух.баланса, после чего проверяется, сошелся баланс или нет (при инициализации переменных им присваивается нулевое значение). Как сделать, чтобы пользователь мог пропустить ввод показателя простым нажатием <Enter> (согласиться с предлагаемым умолчанием или уже введенным им в предыдущий заход значением)? Если я убираю в конце каждой строки... http://www.cyberforum.ru/cpp-beginners/thread162711.html
C++ Переопределение операций
Ситуация такая. В классе матриц переопределён оператор взятия индекса: float operator() (int row, int column) const; Сами данные (элементы матрицы) хранятся в виде одномерного массива, поэтому для простоты нужен этот оператор. В переопределении операции сложения хочу сделать так: result(i,j) = A(i,j)+B(i,j);
Не пишет по-русски C++
Ввожу значения переменных на русском языке, а вместо слов непонятные буквы. Что нужно дописать чтобы понимались русские слова? (Редактор MSVS 2010)
C++ Как создать неопределенное (т.е. не ограниченное в коде) количество экземпляров класса? http://www.cyberforum.ru/cpp-beginners/thread162678.html
Если кратко, опишу задачу так. Есть баланс предприятия - "срез" показателей, который характеризуется рядом параметров (считай, большая таблица с одним столбцом значений). Баланс может рассчитываться по состоянию на любую дату. Нужно проанализировать некоторое количество последовательных балансов (грубо говоря, их может быть до 365*50=18250 экземпляров, хотя реально используется порядка 50,...
C++ обработка исключений Есть вот такой код: #include <iostream> #include <fstream> using namespace std; int _tmain(int argc, _TCHAR* argv) { //Input from file ifstream fin ("input.txt"); подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.08.2010, 22:48     Найти в строке string наиболее часто встречающуюся пару символов и заменить на один новый символ
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
struct pair
{
    char p[2];
    int counter;
    struct pair *next;
};
 
struct pair *search(struct pair *start, char *need);
void max(struct pair *start, char *need);
struct pair *unique(char *str);
void exchange(struct pair *first, char ch, char *instr, char *outstr);
 
struct pair *search(struct pair *start, char *need)
{
    while (start)
    {
        if (start->p[0] == need[0] && start->p[1] == need[1])
            return start;
 
        start = start->next;
    }
 
    return NULL;
}
 
void max(struct pair *start, char *need)
{
    int max;
    
    max = start->counter;
    need[0] = start->p[0];
    need[1] = start->p[1];
    
    while (start)
    {
        if (start->counter > max)
        {
            max = start->counter;
            need[0] = start->p[0];
            need[1] = start->p[1];
        }
 
        start = start->next;
    }
}
 
struct pair *unique(char *str)
{
    struct pair *first, *last, *node;
    char temp[2];
    int i;
    
    first = (struct pair *)malloc(sizeof(struct pair));
    first->p[0] = str[0];
    first->p[1] = str[1];
    first->counter = 1;
    first->next = NULL;
    node = first;
    last = first;
    
    for (i = 1; i < strlen(str) - 1; i++)
    {
        temp[0] = str[i];
        temp[1] = str[i + 1];
        node = search(first, temp);
        
        if (!node)
        {
            node = (struct pair *)malloc(sizeof(struct pair));
            node->p[0] = temp[0];
            node->p[1] = temp[1];
            node->counter = 1;
            last->next = node;
            node->next = NULL;
            last = node;
        }
        else
        {
            node->counter++;
        }
    }
    
    return first;
}
 
void exchange(struct pair *first, char ch, char *instr, char *outstr)
{
    char need[2];
    int i, j;
    
    max(first, need);
    
    for (i = 0, j = 0; i <= strlen(instr); i++)
    {
        if (instr[i] == need[0] && instr[i + 1] == need[1])
        {
            outstr[j++] = ch;
            i++;
        }
        else
        {
            outstr[j++] = instr[i];
        }
    }
}
 
int main()
{
    char instr[40];
    char outstr[40];
    char c;
    struct pair *p;
    
    printf("Vvedite stroku: ");
    scanf("%s", instr);
    printf("Vvedite simvol: ");
    scanf("%s", &c);
    p = unique(instr);
    exchange(p, c, instr, outstr);
    printf("Rezultat: %s", outstr);
    
    getch();
    return 0;
}
Добавлено через 7 минут
Для, того, чтобы заменять другие пары, нужно сохранить найденное в первый раз максимальное число повторений, затем, после того, как произошла первая замена, входной строкой мы делаем получившуюся выходную (в которой один вид пар уже заменён некоторым символом), а из списка пар удаляем элемент, соответствующий заменяемой только что паре. Далее ищем в списке элемент, значение counter которого совпадает с ранее найденным максимальным значением (его менять больше не будем), и производим замену в строке уже этой пары. И это всё проделываем в цикле, пока есть элементы списка, значение counter которых совпадает с найденным в самый первый раз максимальным значением.
 
Текущее время: 21:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru