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';
}