Изменить каждое слово в строке, удалив из него все последующие вхождения первой буквы этого слова
Дано предложение, слова в котором разделены пробелами (одним или несколькими). Изменить каждое слово в строке, удалив из него все последующие вхождения первой буквы этого слова (количество пробелов между словами не изменять). Вот мой код
#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;
}
}
}
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;
}
}
}