将dvb url地址拆分为单独的值

时间:2011-08-19 14:32:31

标签: c string parsing dvb

假设我们有这样的网址:

dvb://1.3f3.255c.15

我的问题是如何以下列方式解析此地址:

val1 = 1
val2 = 3f3
val3 = 255c
val4 = 15

第一个想法是使用标准C库中的strchr(),但可能之前完成。我想尽量简单。当我成功时,我会提出解决方案。

最好的问候

3 个答案:

答案 0 :(得分:2)

您可以使用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, ".");
}

答案 1 :(得分:1)

如果你的模式是固定的,有一个非常简单的答案。我没有多少人这样使用它。

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。

此致

答案 2 :(得分:0)

我认为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]中的值。