C言語には文字列の先頭と末尾にある空白を削除する関数やマクロは存在しません.したがってプログラマが自分でこの機能を実装する必要があります.
実装は以下の手順で行うことが出来ます.
以下に実装例を示します.
/**
* 文字列の先頭と末尾にある空白を削除する
* @param[in] s 対象文字列
* @return 削除した空白の数を返す
*/
int Trim(char *s) {
int i;
int count = 0;
/* 空ポインタか? */
if ( s == NULL ) { /* yes */
return -1;
}
/* 文字列長を取得する */
i = strlen(s);
/* 末尾から順に空白でない位置を探す */
while ( --i >= 0 && s[i] == ' ' ) count++;
/* 終端ナル文字を付加する */
s[i+1] = '\0';
/* 先頭から順に空白でない位置を探す */
i = 0;
while ( s[i] != '\0' && s[i] == ' ' ) i++;
strcpy(s, &s[i]);
return i + count;
}
上記で定義した Trim 関数を使用して,文字列の先頭と末尾にある空白を削除するサンプルプログラムを示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* functions */
int Trim(char *s);
/* main */
int main(void) {
int ret;
char snoopy[] = " SNOOPY ";
ret = Trim(snoopy);
printf("変換後: \"%s\"\n", snoopy);
printf("削除した空白: %d文字\n", ret);
return EXIT_SUCCESS;
}
/*
* 文字列の先頭と末尾にある空白を削除する
* @param[in] s 対象文字列
* @return 削除した空白の数を返す
*/
int Trim(char *s) {
int i;
int count = 0;
/* 空ポインタか? */
if ( s == NULL ) { /* yes */
return -1;
}
/* 文字列長を取得する */
i = strlen(s);
/* 末尾から順に空白でない位置を探す */
while ( --i >= 0 && s[i] == ' ' ) count++;
/* 終端ナル文字を付加する */
s[i+1] = '\0';
/* 先頭から順に空白でない位置を探す */
i = 0;
while ( s[i] != '\0' && s[i] == ' ' ) i++;
strcpy(s, &s[i]);
return i + count;
}
実行結果は以下のようになります.
変換後: "SNOOPY" 削除した空白: 6文字
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.