让我们说我必须解析一些可能有不同分隔符的电话号码。
示例:01/555555 01 / 555-5555
我可以在c中使用strtok()
并将正则表达式作为包含所有不同可能分隔符的分隔符参数吗?
答案 0 :(得分:1)
不,它不支持正则表达式。在询问前阅读文档。另一方面,这正是它的工作原理Read the documentation,即你给它所有可能的分隔符。
在此处查看
#include <stdio.h>
#include <string.h>
int
main(void)
{
char example[] = "exa$mple@str#ing";
char *token;
char *pointer;
pointer = example;
token = strtok(pointer, "@#$");
if (token == NULL)
return -1;
do
{
fprintf(stdout, "%s\n", token);
pointer = NULL;
} while ((token = strtok(NULL, "@#$")) != NULL);
}
答案 1 :(得分:0)
作为iharob答案的补充,sscanf
有时可能是strtok
的替代品。以下是给出示例的说明:
#include <stdio.h>
int main(void) {
const char *s = "01/555555 01/555-5555";
int a, b, c, d, e;
int ret = sscanf(s, "%02d/%d %02d/%d-%d", &a, &b, &c, &d, &e);
if (ret != 5) {
printf("The string is in bad format.\n");
} else {
printf("%02d/%d %02d/%d-%d\n", a, b, c, d, e);
}
return 0;
}
与strtok
类似,它不支持正则表达式,但它可以在一行内提取数据。它的工作原理与scanf完全相同,但它从给定的字符串读取,而不是从标准输入读取。