Удвоение определенного символа в строке

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

Задача формулируется так:

В стандартный поток ввода подается поочередно две строки. Первая содержит только букву латинского алфавита. 3атем подается строка, состоящая из слов, длиной не более 100 символов. Слова состоят из символов, отличных от пробела, слова разделены одним пробелом. Необходимо вывести в стандартный поток вывода строку, в которой в каждом слове будет продублирована каждая буква, написанная в первой строке входного потока.

Ввод:

o

persona

Вывод:

persoona

Вот некоторые мои наработки:

#include<stdio.h>
#include<string.h>
int main()
{
    char letter[2];
    gets(letter);
    char str1[150];
    gets(str1);
    char sym = letter[0]; //получил нужный символ из первой строки
    size_t length = strlen(str1);
    for (int i = 0; i < length; i++)
    {
        if (str1[i] = sym)
        {
            for (int j = i; j < length - i; j++)
            {
                str1[j + 2] = str1[j + 1];
            }
            str1[i + 1] = sym;
            
        }
    }
    printf("%s", str1);
}

Мой алгоритм не работает. Насколько я понял, функции по типу "replace" в языке Си нет. Помогите придумать другой алгоритм.


Ответы (1 шт):

Автор решения: Harry

Удвоение символа c в строке s — только чтоб в ней было достаточно места для этих удвоенных символов — следите сами!

char * doubles(char * s, char c)
{
    int cnt = 0;
    for(const char * t = s; *t; ++t)
        if (*t == c) ++cnt;
    char *q = s + strlen(s) - 1,
         *t = s + strlen(s) + cnt;
    *t-- = 0;
    while(q >= s)
    {
        if (*q == c) *t-- = c;
        *t-- = *q--;
    }
    return s;
}

См. https://ideone.com/6FsjRe

→ Ссылка