Отправляет email-рассылки с помощью сервиса Sendsay

Помогите с задачей

Здравствуйте.

Подскажите, пожалуйста, как это в С или С++ выглядеть дожно.
Желательно на С борланд или вижен значения не имеет.

Найти в строке и удалить из нее последовательность повторяющихся
символов максимальной длины (например, "abcxxxxxxacbyyyyyyyyyyyyyyyz", "abcxxxxxacbz")

Ответить   Михаил Mon, 12 Jan 2004 16:33:08 +0300 (#53148)

 

Ответы:

Hello Михаил,

Monday, January 12, 2004, 4:33:08 PM, you wrote:

не проверял, но что-то типа этого:

/*
i - индекс цикл по строке
curr_i - индекс символа начала последовательности
max_i - то же для самой длинной последовательности
cull_l - длина текущей последовательности
max_l - длина самой длинной последовательности
str - строка
ch - символ текущей последовательности
str2 - строка для записи результата, размер такой же как у str
*/

int curr_l, max_l, curr_i, max_i;
curr_l, = max_l = curr_i = max_i = 0;
char ch = 0;
CString str, str2; // visual c++
// или char str[100], str2[100];

for(i=0; str[i]; i++) {
if(str[i]!=ch) { // последовательность кончилась
// смотрим если она длинее самой длинной
if(curr_l > max_l) {
max_l = curr_l;
max_i = curr_i;
}
// запоминаем новую последовательность
ch = str[i]; // символ новой последовательности
curr_l = 0; // длина новой последовательности в ноль
curr_i = i; // начало новой последовательности
}
else { // последовательность продолжается
curr_l++;
}
}

// все, мы знаем начало и длину самой длинной последовательности
// теперь нужно скопировать то что до нее и то что после нее
// в новую строку и все

strcpy(str2,str+max_i);
strcat(str2,str+max_i+max_l);

// теперь в str2 то что нужно - можно вывести куда нибудь

Ответить   Wed, 14 Jan 2004 19:40:39 +0300 (#54595)