检测特定格式的子字符串的最简单方法是什么?
例如,考虑C
中的字符串"[random characters/symbols] a-b-c [random characters/symbols]"
C中是否有一个函数允许我以“%s-%s-%s”格式检测子字符串?
答案 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