【问题标题】:split dvb url address into separate values将 dvb url 地址拆分为单独的值
【发布时间】:2011-08-19 14:32:31
【问题描述】:

假设我们有这样的 URL:

dvb://1.3f3.255c.15

我的问题是如何通过以下方式解析这个地址:

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

第一个想法是使用标准 C 库中的strchr(),但也许以前做过。我想让它尽可能简单。当我成功时,我会提出我的解决方案。

最好的问候

【问题讨论】:

    标签: c string parsing dvb


    【解决方案1】:

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

    【讨论】:

    • 请注意,strtok 将修改原始字符串,将标记化的字符替换为\0。如果您想保留原始字符串,请考虑使用memcpymemmove。 (注意:如果缺少该方案(dvb://)它将失败)
    【解决方案2】:

    如果您的模式是固定的,那么有一个非常简单的答案。我不知道有多少人这样使用它。

    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。

    问候

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2011-07-08
        • 2019-11-05
        • 2012-01-28
        相关资源
        最近更新 更多