From c6d39e8702868dc971f930697101e88b8067650d Mon Sep 17 00:00:00 2001 From: Bruno Raoult Date: Sun, 5 Sep 2021 12:00:53 +0200 Subject: [PATCH] C phone-number: more comments, code improvement (maybe ;-) --- c/phone-number/phone_number.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/c/phone-number/phone_number.c b/c/phone-number/phone_number.c index 1db00dc..e2c4ace 100644 --- a/c/phone-number/phone_number.c +++ b/c/phone-number/phone_number.c @@ -13,12 +13,13 @@ * I made it to offer an option to traditional strtok() or manual string * parsing. */ +static char *scan="%m[+(0-9]%*[()-. ]%m[0-9]%*[)-. ]%m[0-9]%*[-. ]%m[0-9]"; + char *phone_number_clean(const char *input) { - char *scan="%m[+(0-9]%*[()-. ]%m[0-9]%*[()-. ]%m[0-9]%*[-. ]%m[0-9]"; - char *sn[4]; + char *sn[4] = { 0 }; uint64_t num[4]; - uint64_t *p = &num[0]; + uint64_t *p = &*num; int nmatch; char *res; @@ -31,26 +32,26 @@ char *phone_number_clean(const char *input) for (int i=0; i 10000000000) /* 1 000 000 0000 */ *p -= 10000000000; if (*p > 9999999999 || /* 999 999 9999 */ *p < 2000000000) /* 200 000 0000 */ return res; break; - case 4: /* area */ + case 4: /* country code */ if (*p != 1) return res; - p++; + p++; /* go to area number */ fallthrough; /* only gcc>=7 & clang>=12 */ - case 3: /* last 3 numbers */ + case 3: /* start with area number */ if (*p < 200 || *p > 999 || *(p+1) < 200 || *(p+1) > 999 || *(p+2) > 9999)