Изменить каждое слово в строке, удалив из него все последующие вхождения первой буквы этого слова

Дано предложение, слова в котором разделены пробелами (одним или несколькими). Изменить каждое слово в строке, удалив из него все последующие вхождения первой буквы этого слова (количество пробелов между словами не изменять). Вот мой код

#include <iostream>
#include <cstring>

using namespace std;
void check(char *input){
char* Letter = strtok(input, " ");
while (Letter != NULL){
    char _Letter = Letter[0];

    for (int i = 1; i < strlen(Letter); i++)
        if (Letter[ i ] == _Letter)
            Letter[ i ] = ' ';

    cout << Letter << " ";
    Letter = strtok(NULL, " ");
}
cout << endl;
}
int main(){
    setlocale(LC_ALL , "Ukrainian");
    char *input = new char[100];
    gets(input);
    check(input);
    return 0;
}

Он убирает первое вхождение буквы,но изменяет количество пробелов между словами,тоесть если было 4 пробела,должно остаться 4,но сбрасывается до одного пробела.Помогите исправить


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

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

Я бы просто читал посимвольно:

int main()
{
    cin >> noskipws;
    char c = 0, f = 0;
    for(bool first = true; cin >> c; )
    {
        if (c == ' ')
        {
            first = true;
            cout << c;
        }
        else
            if (first)
            {
                first = false;
                cout << (f = c);
            }
            else
            {
                if (c != f) cout << c;
            }
    }
}

https://ideone.com/ooHK2f

int main()
{
    char s[256];
    gets_s(s,256);
    char *c = s, f = 0;
    for(bool first = true; *c; ++c)
    {
        if (*c == ' ')
        {
            first = true;
            cout << *c;
        }
        else
            if (first)
            {
                first = false;
                cout << (f = *c);
            }
            else
            {
                if (*c != f) cout << *c;
            }
    }
}
→ Ссылка