当分C言語を使ってなかったので、ひさしぶりに書いた内容を残しておきます。
以前、入力した文字列が整数かチェックして、問題なければ整数に変換したいとの相談を受けました。C言語で。とのこと。
ん~正規表現でも使えれば。C言語で使えたっけな。。と調べたところ、
当然のように正規表現を使う方法がありました。そりゃそうですね。
サンプルで作ったコードです。
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
#include <string.h>
int check_strnum(char* str_num, char* str_word)
{
int ret = -1;
regex_t obj_reg;
size_t num = 1;
regmatch_t obj_match[num];
// 文字の開始が整数に該当するかチェックする
const char pattern[] = "^(-?[0-9]+)";
memset(str_num, 0, sizeof(str_num));
// 正規表現パターンの設定(妥当性チェック)
if (regcomp(&obj_reg, pattern, REG_EXTENDED | REG_NEWLINE) != 0) {
return ret;
}
// 正規表現チェックをする
if (regexec(&obj_reg, str_word, num, obj_match, 0) != 0) {
ret = 0;
} else {
// マッチした部分を抽出する
strncpy(str_num, str_word + (int)obj_match[0].rm_so,
(int)obj_match[0].rm_eo - (int)obj_match[0].rm_so);
ret = 1;
}
regfree(&obj_reg);
return ret;
}
int main(int argc, char** argv)
{
char str_num[128];
int ret = 0;
for(int i=1; i < argc; i++){
ret = check_strnum(str_num, argv[i]);
printf("[%d]\n\tinput: %s\n\tMatch: %d\n\toutput: %s\n",
i, argv[i], ret, str_num);
if(ret == 1){
printf("\tconvert: %d\n", atoi(str_num));
}
}
return 0;
}