以特定格式

时间:2015-11-29 01:12:51

标签: c string format substring

检测特定格式的子字符串的最简单方法是什么?

例如,考虑C

中的字符串
"[random characters/symbols] a-b-c [random characters/symbols]"

C中是否有一个函数允许我以“%s-%s-%s”格式检测子字符串?

2 个答案:

答案 0 :(得分:3)

尝试从字符串中的各个点开始,直到成功。

"%*[^- ]查找不包含'-'或空格的子字符串。

"%n在扫描中记录偏移量。

#include<stdio.h>

int main(void) {
  char *s = "[random characters/symbols] a-b-c [random characters/symbols]";

  while (*s) {
    int n = 0;
    sscanf(s, "%*[^- ]-%*[^- ]-%*[^- ]%n", &n);
    if (n) {
      printf("Success '%.*s'\n", n, s);
      break;
    }
    s++;
  }
  return 0;
}

输出

Success 'a-b-c'

答案 1 :(得分:1)

如果要检测文字字符串(没有模式匹配),请使用strchr()或strnchr()。函数strnchr()更好,因为你可以指定一个最大长度来防止一个缺少空终止符的字符串;但是,它不是ANSI,所以并非所有语言都有。如果使用strchr(),请确保防止缺少空终止符。

您可以使用regcomp()执行正则表达式搜索字符串。 见regex in C language using functions regcomp and regexec toggles between first and second match