Игнорирование символов определённой длины в строке (Си) - 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, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д