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

时间:2016-07-30 09:47:08

标签: c c-strings

我有一个字符串定义为:

char *str

如何检查以验证字符串是否与格式匹配:

x-y-z

其中x,y和z的类型均为 int

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

4 个答案:

答案 0 :(得分:3)

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

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

对于一个简单的方法会很好。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

与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
}

答案 3 :(得分:0)

您可以使用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