演習3-2 K&R プログラミング言語C
2010年01月01日
演習3-2
改行、タブを \n
、\t
に変換する escape
関数
#include <stdio.h> #define MAX 1024 void escape(char *s, char *t); int main(int argc, char *argv[]) { int i, c; char s[MAX]; char t[MAX]; i = 0; while ((c = getchar()) != EOF) { s[i] = c; i++; } s[i] = '\0'; escape(s, t); printf("%s", t); return 0; } void escape(char *s, char *t) { int i, j; j = 0; for (i = 0 ; s[i] != '\0'; i++) { switch (s[i]) { case '\t': t[j] = '\\'; j++; t[j] = 't'; j++; break; case '\n': t[j] = '\\'; j++; t[j] = 'n'; j++; t[j] = '\n'; j++; break; default: t[j] = s[i]; j++; break; } } t[j] = '\0'; }
\n
、\t
を改行、タブに変換する unescape
関数
#include <stdio.h> #define MAX 1024 void unescape(char *s, char *t); int main(int argc, char *argv[]) { int i, c; char s[MAX]; char t[MAX]; i = 0; while ((c = getchar()) != EOF) { s[i] = c; i++; } s[i] = '\0'; unescape(s, t); printf("%s", t); return 0; } void unescape(char *s, char *t) { int i, j, c; for (i = 0, j = 0; s[i] != '\0'; i++) { c = s[i]; if (c == '\\') { switch (s[i+1]) { case 't': t[j] = '\t'; j++; i++; break; case 'n': i++; break; default: t[j] = c; j++; break; } } else { t[j] = c; j++; } } t[j] = '\0'; }
実行結果
$ cat hoge.txt hello world. from japan. $ cat hoge.txt | ./escape hello\tworld.\n from\tjapan.\n $ cat hoge.txt | ./escape | ./unescape hello world. from japan.
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726