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