我想检查字符串的字符是否采用这种形式:
hw:
+ 一个数字字符 + ,
+ 一个数字字符
hw:0,0
hw:1,0
hw:1,1
hw:0,2
Et cetera
/* 'hw:' + 'one numeric character' + ',' + 'one numeric character' */
我发现strncmp(arg, "hw:", 3)
但只检查前 3 个字符。
strlen()
使用and很诱人sscanf()
:
char *data = "hw:1,2";
char digit1[2];
char digit2[2];
if (strlen(data) == 6 && sscanf(data, "hw:%1[0-9],%1[0-9]", digit1, digit2) == 2)
...then the data is correctly formatted...
...and digit1[0] contains the first digit, and digit2[0] the second...
如果您需要知道两位数是什么,而不仅仅是格式是否正确,这将特别有效。但是,您也可以通过固定位置将数字拉出,所以这并不重要。"hw:12,25"
如果您将来需要允许,它也会优雅地升级(尽管并非没有变化) 。
strncmp(arg, "hw:", 3)
是一个好的开始(请记住,找到匹配项时该函数返回零)。接下来,您需要检查
这导致以下表达式:
if (!strncmp(arg, "hw:", 3) && isdigit(arg[3]) && arg[4] == ',' && isdigit(arg[5])) {
...
}
请注意使用isdigit(int)
来测试字符是否为数字。
如果数字可以跨越多个数字,您可以使用sscanf
: 这也可以让您检索值:
int a, b;
if (sscanf(arg, "hw:%d,%d", &a, &b) == 2) {
...
}
GNU C 库支持正则表达式。如果您不想学习正则表达式,您可以重复使用strncmp
以及ctype.h
标题中的函数。