C/C++

Задача на Си

Как удвоить все символы "О" в строке, если рассматривать строчку как массив символов?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void shift(char *array, int size, int pos)
{
//сдвигаем элементы массива
//от позиции найденного
//элемента в конец массива:
for(int i = size-1; i >= pos; i--)
array[i] = array[i-1];
array[pos]='\n';

}


int main()
{
int len = 256,//макс.длина строки
ind; //счётчик индекса эл-та
char *A, //динамич.массив
el; //значение для вставки

//выделяем память в ОЗУ
//для массива:
A=(char*)malloc(len*sizeof(char));

//если память не выделена,
//то завершаем работу
//программы с ошибкой 1:
if(!A)
{
printf("\nError. Array not created.");
exit(1);
}
//заполняем массив
memset(A, '\0', len);
printf("\nEnter your text:\n");
fgets(A,len,stdin);
A[strlen(A)-1] = '\0';

printf("\n\nEnter element after inserting: ");
scanf("%c", &el);
ind=len;
for(int i = 0; i <= ind; i++)
{ //for
if(A[i]==el)
{ //if
//увеличить размер памяти
//для массива на 1 ячейку:
A=(char*)realloc(A,++len*sizeof(char));
//сдвинуть элементы к новому
//концу массива от позиции
//найденного элемента:
shift(A,len,i+1);

} //if
} //for

for(int i = 0; i < len; i++)
if(A[i]=='\n' && i!=0) A[i]=A[i-1];


printf("\n\nResult:\n");
printf("%s", A);

free(A);
system("pause"); //for Windows
return 0;
}
Артур Иванов
Артур Иванов
37 945
Лучший ответ
1. подсчитываешь количество символов "О"
2. содаешь новый массив символов с размером (размер исходной строки + это количество)
3. Все символы из старой строки не равные О копируешь 1 раз в новый массив, иначе копируешь дважды.
{
*out = *str; //копируем
if (*str == 'O') *++out = *str; //еще один раз если это О
out++; str++; //переходим к следующему символу
}
4. заменяешь старый массив новым.
Андрей Ильичев
Андрей Ильичев
51 416