Из входного потока вводится произвольное число строк. Для каждой строки сформировать новую строку, поместив в нее группы символов - C (СИ)

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

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

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

Решение задачи: «Из входного потока вводится произвольное число строк. Для каждой строки сформировать новую строку, поместив в нее группы символов»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
    char curr,prev;
    int  i,j,l,count;
    char Buf[200];
 
    while (1)
    {
        for (i=0; i<200; i++) Buf[i]=0; 
        scanf("%s",Buf);
        l=strlen(Buf);
        if (l==0) break;
        prev=Buf[0];
        count=1;
        for (i=1; i<l; i++)
        {
            curr=Buf[i];
            if (curr == prev) 
                count++;
            else
            {
                if (count > 1) 
                {
                    for (j=1; j<=count; j++) printf("%c",prev);
                    printf(" ");
                }
                count=1;
            }
            prev=curr;
        }
        if (count > 1) 
        {
            for (j=1; j<=count; j++) printf("%c",prev);
            printf(" ");
        }
        printf("\n");
    }
    return 0;
}

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

  1. Вводится произвольное число строк с помощью сканера ввода.
  2. Для каждой строки формируется новая строка, поместив в нее группы символов.
  3. Переменная curr содержит текущий символ входной строки.
  4. Переменная prev содержит предыдущий символ входной строки.
  5. Переменная count содержит количество одинаковых символов подряд.
  6. Переменная l содержит длину входной строки.
  7. Переменная Buf содержит массив символов для хранения входной строки.
  8. Если длина входной строки равна 0, то цикл завершается.
  9. Если текущий символ равен предыдущему, то счетчик count увеличивается.
  10. Если текущий символ не равен предыдущему, то выводится подстрока, образованная предыдущими одинаковыми символами.
  11. Счетчик count сбрасывается в 1.
  12. Если длина входной строки больше 1, то выводится подстрока, образованная предыдущими одинаковыми символами.
  13. После каждой выведенной подстроки выводится пробел.
  14. После каждой строки выводится символ новой строки.
  15. В конце программы возвращается 0, что означает успешное выполнение.

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

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