プログラミング言語 C
・ 次に示す関数 trim() は、文字列の末尾から 余分な空白とタブと改行文字をとり除き、そのどれにもあたらない 最も右側の文字が見つかったところで break を用いて ループを抜け出すプログラムである。*1
- int trim(char s[])
- {
- int n;
- for (n = strlen(s) - 1; n >= 0; n--) {
- if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n') {
- break;
- }
- }
- s[n + 1] = '\0';
- /* 文字列の終わりを示すための ヌル文字を追加しておく */
- return n;
- }
・ ここで strlen() は文字列の長さを求めるために使われている。この forループでは、行の最後の文字から開始して、空白・タブ・改行文字ではない最初の文字をさがして 逆方向にスキャンしていく。そして そうした文字が見つかったとき、あるいは n が負になったとき (つまり 文字列全体をスキャンし終わったとき) にループは終了する。
・ たとえ 行に空白文字しかないときでも、この関数が正常に動作することを確かめてほしい。(p78-79)
- /* trim_str.c */
- #include
- #include
- int trim(char str[]);
- main()
- {
- char str_1[] = "abcdef\n\t\t";
- char str_2[] = " "; /* 空白文字の連続でも OK */
- trim(str_1);
- trim(str_2);
- printf("%s", str_1);
- printf("< end of str_1\n");
- printf("%s", str_2);
- printf("< end of str_2\n");
- return 0;
- }
- int trim(char s[])
- {
- int n;
- for (n = strlen(s) - 1; n >= 0; n--) {
- if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n') {
- break;
- }
- }
- s[n + 1] = '\0';
- return n;
- }
$./trim_str として確認。
*1:←でも コレ、なんの役にたつんだろう ?