Добрый день. В общем задание следующее
Задание реализовал, но не до конца- остановился на удалении лишних элементов. Т.Е. моя программа находит длинную последовательность, заменяет последние два символа из цепочки количеством повторений и самим символом. НО как удалить лишние из цепочки реализовать не получается....
П.С. в программе, для наглядности, символ, который был повторен максимальное количество раз заменен на 'X'
(для правильного отображения нужно *(arr + 1) = 'X'; заменить на *(arr + 1) = *sign
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
void input(char *arr,int *siz)
{
gets_s(arr,*siz);
}
void dec(char *arr, char *sign, int *max, int *count)
{
for (*arr; *arr != '\0'; *arr++)
{
if (*arr == *(arr + 1)) //сравниваем соседние элементы
{
(*max)++;
if (*max > *count) //отбираем самую длинную последовательность
{
*count = *max; //count - сколько наибольшее колличество раз повторился символ
*sign = *arr; //sign- какой символ повторился
}
}
else *max = 1;
}
}
void Search(char *arr, char *sign, int *count)
{
int max_2 = 1;
for (; *arr != '\0'; *arr++)
{
if (*arr == *(arr + 1)) //сравниваем соседние элементы
{
max_2++;
if (*arr == *sign && max_2 == *count) //заменяет символы
{
char c = *count + '0'; //переводим int в char
*arr = c;
*(arr + 1) = 'X';
break;
}
}
else max_2 = 1;
}
}
void output(char *arr)
{
printf("%s",arr);
}
int main()
{
int siz = 1024;
char *arr = (char*)malloc(siz*sizeof(char)); //выделям память под динамический массив
char sign = 0;
int count = 0;
int max = 1;
input(arr,&siz);
dec(arr, &sign, &max, &count);
Search(arr, &sign, &count);
output(arr);
free(arr); //освобождаем память
system("pause");
}