1

我想检查字符串的字符是否采用这种形式:

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 个字符。

4

3 回答 3

4

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"如果您将来需要允许,它也会优雅地升级(尽管并非没有变化) 。

于 2013-06-29T02:55:30.300 回答
3

strncmp(arg, "hw:", 3)是一个好的开始(请记住,找到匹配项时该函数返回零)。接下来,您需要检查

  • 字符 3 是一个数字,
  • 字符 4 是逗号,并且
  • 字符 5 是一个数字。

这导致以下表达式:

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) {
    ...
}
于 2013-06-29T02:49:11.970 回答
1

GNU C 库支持正则表达式。如果您不想学习正则表达式,您可以重复使用strncmp以及ctype.h标题中的函数。

于 2013-06-29T02:51:15.740 回答