@Sector567

Как изменить определенное кол-во символов внутри строки (язык Си)?

Добрый день. В общем задание следующее
8a20eb712fe44f589c106cc72eddf11d.png

Задание реализовал, но не до конца- остановился на удалении лишних элементов. Т.Е. моя программа находит длинную последовательность, заменяет последние два символа из цепочки количеством повторений и самим символом. НО как удалить лишние из цепочки реализовать не получается....
П.С. в программе, для наглядности, символ, который был повторен максимальное количество раз заменен на '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");
}
  • Вопрос задан
  • 282 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В условии задачи сказано, что надо заменить все последовательности, искать самую длинную не надо. Самый простой способ - создать ещё один массив того же размера и перебирая символы первого заносить во второй готовую последовательность. Также можно сделать всё в одном массиве, читая и записывая по двум разным указателям.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы