1-19 reverse.c
書けた。
/* * P38 演習1-19 * 文字列sを逆に並べる関数reverse(s)を書け。さらに、この関数を * 使って、入力を一時に1行ずつ逆転するプログラムを書け。 * * 2007/05/29 arikui */ #include <stdio.h> char* reverse(char *s){ int i, j; char t; for(i = 0, j = 0; s[j] != '\0'; ++j) ; if (j < 2) return s; --j; while(j > i){ t = s[j]; s[j--] = s[i]; s[i++] = t; } return s; } #define BUFFER_SIZE 256 char* get_line(char *buf, int size); char* chomp(char *str); int main(void){ char buff[BUFFER_SIZE]; while(get_line(buff, BUFFER_SIZE) != NULL){ chomp(buff); printf("%s\n", reverse(buff)); } return 0; } char* get_line(char *buf, int size){ int c, i = 0; while((c = getchar()) != EOF){ buf[i++] = c; if (i == size || c == '\n') break; } buf[i] = '\0'; return ((c == EOF && i == 0) ? NULL : buf); } char* chomp(char *s){ int i; if (s[0] != '\0'){ for(i = 0; s[i] != '\0'; ++i) ; if (s[--i] == '\n') s[i] = '\0'; } return s; }