Игнорирование символов определённой длины в строке (Си) - C (СИ)

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

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

Добрый день! Имеется код, который преобразует двоичный код в символы. Необходимо доработать его так, чтобы при выводе программа игнорировала слова, длина которых меньше или равна N. Пример: вводим 01001000 01100101 01101100 01101100 01101111 00100000 01001000 01101001 00100000 01110111 01101111 01110010 01101100 01100100 00100001 // == Hello Hi world! получаем (при N = 3) Hello world! P.S: запрещено работать с динамической памятью, инклюдить string.h Код:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define DELIM ' '
 
int main(void) 
{
    char *ptr, ch[9];
    char in[255];
    char out[255];
    ch[8]='\0';
    
    int i = 0;
    int N = 3;
    
    fgets(in, sizeof(in), stdin);
        for (ptr=in, i=0; * ptr; ptr++)
        {
            if  (i == 8) 
            {
                printf("%c", (char)strtol(ch, 0, 2));
                i = 0;
            }
            if (*ptr != DELIM)
                ch[i++] = *ptr;
        }      
    return 0;
}

Решение задачи: «Игнорирование символов определённой длины в строке (Си)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main(void) 
{
    char *pEnd;
    char in[255];
    char out[255];
    int N = 3, n=0;
    fgets(in, sizeof(in), stdin);
    for (char ch=(char)strtol(in, &pEnd, 2); ch; ch = (char)strtol(pEnd, &pEnd, 2)) {
        if ((ch==' ' | ch=='\n' | *pEnd == '\n')){
            if (n >= N) {
                out[n++] = ch;
                out[n] = '\0';
                printf("%s", out);
            }
            n=0;
        }
        else {
            out[n++] = ch;
        }
    }
        //*(pOut++) = ch;
 
    //*pOut = '\0'; 
    //for (char *ptr=out; *ptr; ptr++ ) 
 
    return 0;
}

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

  1. В начале программы подключаются необходимые библиотеки: stdio.h, stdlib.h и ctype.h
  2. Затем определены и инициализированы переменные: — pEnd — указатель на конец строки; — in — массив для чтения строки с терминала; — out — массив для записи отфильтрованной строки; — N — количество игнорируемых символов определенной длины; — n — счётчик символов в выходной строке; — ch — текущий символ; — pEnd — указатель на текущий символ.
  3. Далее, с помощью функции fgets(), в массив in считывается строка с терминала.
  4. Используя цикл for и функцию strtol(), из считанной строки извлекаются символы определенной длины (в данном случае — 2 символа).
  5. Если извлечённый символ является пробелом, переносом строки или концом строки, то проверяется условие: — если счётчик n больше или равен N, то текущий символ добавляется в выходную строку, а счётчик n сбрасывается в ноль; — если счётчик n меньше N, то текущий символ добавляется во входную строку без изменений; — счётчик n сбрасывается в ноль.
  6. Если извлечённый символ не является пробелом, переносом строки или концом строки, то он добавляется во входную строку без изменений.
  7. В конце программы возвращается значение 0, что означает успешный конец работы программы.

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


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

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

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