C言語サンプルプログラム


trimの実装とstrtok

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

/* functions */
int Trim(char *s);
int leftTrim(char *s);
int rightTrim(char *s);


/* main */
int main(void) {
    int ret;
    char snoopy[] = " 	 		   SV_ADDRESS 		  =	 	  198.168.0.59 	 ";

    char* key;
    char* value;
    char  keytmp[80] = { 0 };
    char  valuetmp[80] = { 0 };
    //
    key = strtok(snoopy, "=");
    printf("key: \"%s\"\n", key);

    // 左右の空白文字を削除するために、いったんコピーする。
    strcpy(keytmp, key);

    // 左右の空白を削除する
    Trim(keytmp);
    if(strcmp("SV_ADDRESS", keytmp) == 0) {

        value = strtok(NULL, "=");

        // 左右の空白文字を削除するために、いったんコピーする。
        strcpy(valuetmp, value);

        // 左右の空白を削除する
        Trim(valuetmp);

        // TODO
        // valuetmp をどこかの変数に代入すること。
    }

    return EXIT_SUCCESS;
}

/*
 * 文字列の左側にある空白を削除する
 * @param[in] s 対象文字列
 * @return 削除した空白の数を返す
 */
int leftTrim(char *s) {
    int i = 0;

    /* 空ポインタか? */
    if ( s == NULL ) { /* yes */
        return -1;
    }

    /* 先頭から順に空白でない位置を探す */
    while ( s[i] != '\0' && isspace(s[i]) ) {
        i++;
    }
    strcpy(s, &s[i]);

    return i;
}

/*
 * 文字列の右側にある空白を削除する
 * @param[in] s 対象文字列
 * @return 削除した空白の数を返す
 */
int rightTrim(char *s) {
    int i;
    int count = 0;

    /* 空ポインタか? */
    if ( s == NULL ) { /* yes */
        return -1;
    }

    /* 文字列長を取得する */
    i = strlen(s);

    /* 末尾から順に空白でない位置を探す */
    while ( --i >= 0 && isspace(s[i]) ) {
        count++;
    }

    /* 終端ナル文字を付加する */
    s[i + 1] = '\0';

    return count;
}

/*
 * 文字列の左側と右側の空白を削除する
 * @param[in] s 対象文字列
 * @return 削除した空白の数を返す
 */
int Trim(char *s) {
    int count = 0;

    /* 空ポインタか? */
    if ( s == NULL ) { /* yes */
        return -1;
    }

    count = leftTrim(s);
    count += rightTrim(s);

    return count;

}
最終更新:2016年09月22日 13:55