Консультация № 198469
06.05.2020, 16:14
0.00 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:

Программа работает не корректно. Нужно чтобы программа, удаляла повторяющиеся символы, оставив лишь один из них ( в одном слове) и переходила к следующему, и в нем так же удаляла повторяющийся символ. Код, который есть у меня работает так.
Вводим предложение:
Thisss iis a cooOl dday!!
//программа выводит:
This acoOldy!
Но нужно:
This is a coOl day!

Приложение:
#include <stdlib.h>
#include <string.h>
#include <locale.h>

int main()
{
setlocale(LC_ALL,"rus");
char s[100], s_new[100];
char c, i, j;
puts("Программа удаляет повторяющиеся символы, оставив лишь один из них.\n");
puts("Введите слово: ");
gets(s); // Вводим слово
j = 0;
for (i=0; i<strlen(s); i++) // Цикл по слову
{
c = s[i];
if (strchr(s_new,c) == NULL ) // Проверка соседней буквы
{
s_new[j] = c;
j += 1;
}
}
s_new[j] = '\0';
puts(s_new);
system("pause"); // Задержка перед закрытием программы
return 0;
}

Обсуждение

давно
Студент
403303
19
06.05.2020, 17:07
общий
это ответ
Здравствуйте, niktop1!

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

Код:

for (i=0; s[i]; i++) // Цикл по слову
if( i==0 || (s[i] != s_new[j-1]) )
s_new[j++]=s[i];
Форма ответа