Игнорирование символов определённой длины в строке (Си) - 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; }
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки: stdio.h, stdlib.h и ctype.h
- Затем определены и инициализированы переменные: — pEnd — указатель на конец строки; — in — массив для чтения строки с терминала; — out — массив для записи отфильтрованной строки; — N — количество игнорируемых символов определенной длины; — n — счётчик символов в выходной строке; — ch — текущий символ; — pEnd — указатель на текущий символ.
- Далее, с помощью функции fgets(), в массив in считывается строка с терминала.
- Используя цикл for и функцию strtol(), из считанной строки извлекаются символы определенной длины (в данном случае — 2 символа).
- Если извлечённый символ является пробелом, переносом строки или концом строки, то проверяется условие: — если счётчик n больше или равен N, то текущий символ добавляется в выходную строку, а счётчик n сбрасывается в ноль; — если счётчик n меньше N, то текущий символ добавляется во входную строку без изменений; — счётчик n сбрасывается в ноль.
- Если извлечённый символ не является пробелом, переносом строки или концом строки, то он добавляется во входную строку без изменений.
- В конце программы возвращается значение 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д