プログラミング言語 C

・ 次に示す関数 trim() は、文字列の末尾から 余分な空白とタブと改行文字をとり除き、そのどれにもあたらない 最も右側の文字が見つかったところで break を用いて ループを抜け出すプログラムである。*1

  1. int trim(char s[])
  2. {
  3. int n;
  4. for (n = strlen(s) - 1; n >= 0; n--) {
  5. if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n') {
  6. break;
  7. }
  8. }
  9. s[n + 1] = '\0';
  10. /* 文字列の終わりを示すための ヌル文字を追加しておく */
  11. return n;
  12. }

・ ここで strlen() は文字列の長さを求めるために使われている。この forループでは、行の最後の文字から開始して、空白・タブ・改行文字ではない最初の文字をさがして 逆方向にスキャンしていく。そして そうした文字が見つかったとき、あるいは n が負になったとき (つまり 文字列全体をスキャンし終わったとき) にループは終了する。

・ たとえ 行に空白文字しかないときでも、この関数が正常に動作することを確かめてほしい。(p78-79)

  1. /* trim_str.c */
  2. #include
  3. #include
  4. int trim(char str[]);
  5. main()
  6. {
  7. char str_1[] = "abcdef\n\t\t";
  8. char str_2[] = " "; /* 空白文字の連続でも OK */
  9. trim(str_1);
  10. trim(str_2);
  11. printf("%s", str_1);
  12. printf("< end of str_1\n");
  13. printf("%s", str_2);
  14. printf("< end of str_2\n");
  15. return 0;
  16. }
  17. int trim(char s[])
  18. {
  19. int n;
  20. for (n = strlen(s) - 1; n >= 0; n--) {
  21. if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n') {
  22. break;
  23. }
  24. }
  25. s[n + 1] = '\0';
  26. return n;
  27. }

$./trim_str として確認。

*1:←でも コレ、なんの役にたつんだろう ?