Можно ли преобразовать программу, убирающую пробелы, используя только 1 функцию - C (СИ)
Формулировка задачи:
Можно ли преобразовать программу, убирающую пробелы, используя только 1 функцию getline (чтобы избежать дублежа)?
И мне еще не совсем понятно в этой программе функция filter (что такое i и j?)
#include <stdio.h> #define MAXLINE 1000 /* максимальный размер вводимой строки + 1 */ int getl(char line[], int maxline); int filter(char to[], char from[]); int main() { int len; /* длина текущей строки */ char line[MAXLINE]; /* текущая строка */ char newline[MAXLINE]; /* новая строка */ len = 0; while ((len = getl(line, MAXLINE)) > 0) { if ((len = filter(newline, line)) != 1) printf("| %s", newline); } return 0; } /* getline: читает строку в s, возвращает длину */ int getl(char s[], int lim) { int c, i; for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } /* filter: преобразует содержимое 'from' в 'to' * убирает повторные пробелы и табуляции */ int filter(char to[], char from[]) { int c, i, j, sflag; i = 0; j = 0; sflag = 0; while ((c = from[i]) != '\n') { if (c == ' ' || c == '\t'){ if (sflag == 0) { to[j] = ' '; sflag = 1; ++j; } } else { to[j] = c; sflag = 0; ++j; } ++i; } if (c == '\n') { to[j] = c; ++j; } to[j] = '\0'; return j; }
Решение задачи: «Можно ли преобразовать программу, убирающую пробелы, используя только 1 функцию»
textual
Листинг программы
#include <stdbool.h> #include <stdio.h> void delete_char(char* str, int idx) { while( str[idx] ) { str[idx] = str[++idx]; } } void remove_spaces(char* str) { char previous_char = str[0]; int i = 1; while( previous_char ) { if( previous_char == ' ' && str[i] == ' ' ) { delete_char(str, i); } else { previous_char = str[i++]; } } } void chomp(char* str) { while( *str ) { if( *str == '\n' ) { *str = '\0'; break; } ++str; } } int main() { char buf[1000]; while( true ) { fflush(stdin); fgets(buf, sizeof(buf), stdin); if( buf[0] == '\n' ) break; chomp(buf); remove_spaces(buf); printf("%s\n", buf); } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д