演習1-18 K&R プログラミング言語C
2009年12月04日
演習1-18
#include <stdio.h> #define MAXLINE 1024 /* 入力行の最大長 */ int mygetline(char line[], int maxline); int delete_tail_blank(int len, char line[]); int main(int argc, char *argv[]) { int len, newlen; char line[MAXLINE]; while ((len = mygetline(line, MAXLINE)) > 0) { newlen = delete_tail_blank(len, line); if (newlen > 1) { /* 空白行でない場合に印字する。 */ printf("%d:%s", newlen, line); } } return 0; } /* mygetline : s に行を入れ、長さを返す */ int mygetline(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; } /* 行末の空白・タブを取り除く。返り値として変更後の行の長さを返す。 */ int delete_tail_blank(int len, char line[]) { int last; len = len - 1; /* 配列 line の末尾のインデクスを行の長さ len から作る */ last = line[len]; /* 末尾の行を保存する。末尾が改行 \n の場合の対策 */ while (len >= 0) { /* 空白・タブ・改行以外の文字が出てくるまで len をデクリメントしていく。 */ if (line[len] == ' ' || line[len] == '\t' || line[len] == '\n') ; else break; --len; } if (last == '\n') { /* 末尾が改行 \n の場合、改行文字を回復させる */ line[++len] = '\n'; } line[++len] = '\0'; return len; }
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726