Вывести все последовательности символов из строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Задача: Дана строка символов. Признак конца - символ '\n' (перевод строки). Необходимо вывести все одинаковые символы, стоящие рядом. Решение с ошибкой:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int sequencedetected=0; //Последовательность найлена = 0
char nowch, nextch; //Символ i, Символ i+1
scanf(" %c", &nextch);  //Считываем символ i+1
while(nextch!='\n') //Пока nextch не перенос строки
{
    if(nowch==nextch)   //Есди i равен i+1, то
    {
        sequencedetected=1; //Обнаружена последовательность
        printf("%c",nowch); //Печатаем символ i
    }
    if((nowch!=nextch)&&(sequencedetected==1))  //Если i не равен i+1 и обнаружена последовательность, то
    {
        sequencedetected=0; //Последовательноть не обрънаружена
        printf("%c",nowch); //Печатаем символ i
    }
    nowch=nextch;   //Меняем местами i и i+1
    scanf(" %c", &nextch);  //Считываем новый символ i+1
}
return 0;
}
Дело в том, что если вводить последовательность одинаковых символов k и завершать ее другим, не схожим с \n и k, то все работает, как надо. А вот если мы завершим последовательность символов переносом строчки, то программа выведет на экран последовательность без одного символа. Пожалуйста, помогите

Решение задачи: «Вывести все последовательности символов из строки»

textual
Листинг программы
#include <stdio.h>
 
int main()
{
    char a, b = '\0';
    int flag1 = 0, flag2 = 0;
    while((a = getchar()) != '\n'){
        if(b){
            if(a == b){
                flag2 = 0;
                if(!flag1){
                    putchar(b);
                    putchar(a);
                    flag1 = 1;
                }
                else
                    putchar(a);
            }
            else{
                if(!flag2){
                    putchar('\n');
                    flag2 = 1;
                }
                flag1 = 0;
            }
        }
        b = a;
    }
    return 0;
}

Объяснение кода листинга программы

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.556 из 5
Похожие ответы