1-18 rm_spc.c
malloc()使えないから一行1023byteまでだよー。
というか一行2000byteも3000byteもあるテキストファイルなんてくそったれだ。
/* * P38 演習1-18 * 各入力行から、行の後のブランクやタブを取り除き、かつ空白行は * すべて削除するようなプログラムを書け。 * * 2007/05/24 arikui */ #include <stdio.h> #define LINE_LIMIT 1024 char* read_line(char *buff, int limit); int string_length(char *str); void rstrip(char *str); int main(void){ char buff[LINE_LIMIT]; while(read_line(buff, LINE_LIMIT) != NULL){ rstrip(buff); if (string_length(buff) != 0) printf("%s\n", buff); } return 0; } char* read_line(char *buff, int limit){ int c, len = 0; while(1){ if (len > limit) break; c = getchar(); if (c == EOF) break; buff[len++] = c; if (c == '\n') break; } buff[len] = '\0'; return (c == EOF && len == 0) ? NULL : buff; } int string_length(char *str){ int len; for(len = 0; str[len] != '\0'; len++) ; return len; } void rstrip(char *str){ int p = string_length(str) - 1; while(p >= 0){ if (str[p] != ' ' && str[p] != '\t' && str[p] != '\n') break; --p; } str[++p] = '\0'; }