假设我们有这样的 URL:
dvb://1.3f3.255c.15
我的问题是如何通过以下方式解析这个地址:
val1 = 1
val2 = 3f3
val3 = 255c
val4 = 15
第一个想法是strchr()
从标准 C 库中使用,但也许以前做过。我想让它尽可能简单。当我成功时,我会提出我的解决方案。
最好的祝福
你可以使用strtok
char dvb_url[] = "dvb://1.3f3.255c.15";
//Begin stripping the scheme (dvb:/)
char *tokenized = strtok(dvb_url, "/");
//Finish stripping scheme
tokenized = strtok(NULL, "/.");
while(tokenized != NULL)
{
//Store in variable here
printf("%s\n", tokenized);
tokenized = strtok(NULL, ".");
}
如果您的模式是固定的,那么有一个非常简单的答案。我不知道有多少人这样使用它。
sscanf()
在这里非常方便:)
char *dvb_string = "dvb://1.3f3.255c.15";
char proto[10], output1[10], output2[10], output3[10], output4[10];
sscanf(dvb_string, "%[^:]://%[^.].%[^.].%[^.].%s", proto, output1, output2, output3, output4);
fprintf(stderr, "%s -- > %s %s %s %s %s\n", dvb_string, proto, output1, output2, output3, output4);
dvb://1.3f3.255c.15 -- > dvb 1 3f3 255c 15
就这么简单:) 享受 C。
问候
我认为该strchr()
功能足够方便:
char *str = "dvb://1.3f3.255c.15";
char val[10][256];
char *cur = str;
int i = 0;
for ( ; cur = strchr(str, '.'); cur != NULL && i < 10)
{
strncpy(val[i], cur, 256);
if(strchr(val[i], '.') != NULL)
strchr(val[i], '.') = '\0';
++i;
}
您应该以val[0 to N]
.