检查字符串是否匹配特定格式

Check if string matches a particular format

我有一个字符串定义为:

char *str

如何检查以验证字符串是否符合格式:

x-y-z

其中 x、y 和 z 都是 int 类型。

例如:字符串 1-2-4 应该是有效的,而 "1-2*3""1-2""1-2-3-4" 是无效的。

实现所需功能的一种简单方法是使用 scanf() 并检查返回值。像

  ret = scanf("%d-%d-%d", &x, &y, &z);
  if (ret == 3) {// match};

简单的方法就可以了。

这种方法不适用于多种数据类型和更长的输入,但仅适用于固定格式。对于更复杂的场景,您可能需要考虑使用正则表达式库。

如果您需要的不仅仅是匹配,还需要更多信息,那么您可以使用循环遍历字符串。我会给你一些入门代码。

int i = 0;
int correct = 1;
int numberOfDashes = 0;
while(correct && i < strlen(str)) {
  if(isdigit(str[i])) {

  }
  else {
     if(str[i] == '-') {
        numberOfDashes++;
     }
  }
  i++;
} 

与 Sourav 的回答一致。

int check( char t[] )
{
    int a, b, c, d;
    return sscanf( t, "%d-%d-%d-%d", &a, &b, &c, &d ) == 3;
}


int main()
{
    char s[] = "1-2-4";
    char t[] = "1-2-3-4";
    printf( "s = %s, correct format ? %s\n", s, check( s ) ? "true" : "false" );  // <-- true
    printf( "t = %s, correct format ? %s\n", s, check( t ) ? "true" : "false" );  // <-- false
}

您可以使用 sscanf 作为您的特定字符串示例。

int main()
{    
  int x,y,z;
  char *str="1-2-4";  
  int a = sscanf(str, "%d-%d-%d", &x, &y, &z);
  printf( "%s", (a == 3) ? "Correct format":"Incorrect format");

  return 0;
}

Demo on Ideone

sscanf 格式不适用于这些指定的字符串:

int main()
{    
  int x,y,z;
  char *str="1-2*3";  //or "1-2" or ""1-2-3-4""   
  int a = sscanf(str, "%d-%d-%d", &x, &y, &z);
  printf( "%s", (a == 3) ? "Correct format":"Incorrect format");

  return 0;
}

Demo on Ideone

为了避免这个,你需要使用regular expressions,正如其他人已经说过的那样。