Игнорирование символов определённой длины в строке (Си) - 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 Код:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #define DELIM ' '
  5. int main(void)
  6. {
  7. char *ptr, ch[9];
  8. char in[255];
  9. char out[255];
  10. ch[8]='\0';
  11. int i = 0;
  12. int N = 3;
  13. fgets(in, sizeof(in), stdin);
  14. for (ptr=in, i=0; * ptr; ptr++)
  15. {
  16. if (i == 8)
  17. {
  18. printf("%c", (char)strtol(ch, 0, 2));
  19. i = 0;
  20. }
  21. if (*ptr != DELIM)
  22. ch[i++] = *ptr;
  23. }
  24. return 0;
  25. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int main(void)
  6. {
  7.     char *pEnd;
  8.     char in[255];
  9.     char out[255];
  10.     int N = 3, n=0;
  11.     fgets(in, sizeof(in), stdin);
  12.     for (char ch=(char)strtol(in, &pEnd, 2); ch; ch = (char)strtol(pEnd, &pEnd, 2)) {
  13.         if ((ch==' ' | ch=='\n' | *pEnd == '\n')){
  14.             if (n >= N) {
  15.                 out[n++] = ch;
  16.                 out[n] = '\0';
  17.                 printf("%s", out);
  18.             }
  19.             n=0;
  20.         }
  21.         else {
  22.             out[n++] = ch;
  23.         }
  24.     }
  25.         //*(pOut++) = ch;
  26.  
  27.     //*pOut = '\0';
  28.     //for (char *ptr=out; *ptr; ptr++ )
  29.  
  30.     return 0;
  31. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы