【问题标题】:split/parse and get value from a char array拆分/解析并从 char 数组中获取值
【发布时间】:2012-01-20 12:07:20
【问题描述】:

我想用 C 语言编写一个函数,通过它我可以从 char 数组中获取标记的值 ::

示例 ::

char a[]="name=RRR&school=AAA&roll=111&address=SSS";

我想写一个函数 - 如果我给“name”作为函数的参数,那么函数将返回 RRR --- 如果我给“school”作为函数的参数,那么函数将返回 AAA

我已经用 Java 完成了...

    public String getTagValue(String toSplit, String tag)
{
    String CommandTypeValue="";
    String[] FirstSplit;
    String[] SecondSplit;

    String delims = "&";
    FirstSplit = toSplit.split(delims);

    for(int i=0; i<FirstSplit.length; i++ )
    {
        delims = "=";
        SecondSplit = FirstSplit[i].split(delims);
        if(SecondSplit[0].equals(tag))
            return SecondSplit[1];
        //System.out.println(SecondSplit[0] +" "+ SecondSplit[1]);
    }

    return CommandTypeValue;

}

C 怎么做??任何简单的库或函数??

【问题讨论】:

    标签: c parsing split


    【解决方案1】:

    strtok 是您正在寻找的。​​p>

    例子:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    char* getTagValue(char* a_tag_list, char* a_tag)
    {
        /* 'strtok' modifies the string. */
        char* tag_list_copy = malloc(strlen(a_tag_list) + 1);
        char* result        = 0;
        char* s;
    
        strcpy(tag_list_copy, a_tag_list);
    
        s = strtok(tag_list_copy, "&");
        while (s)
        {
            char* equals_sign = strchr(s, '=');
            if (equals_sign)
            {
                *equals_sign = 0;
                if (0 == strcmp(s, a_tag))
                {
                    equals_sign++;
                    result = malloc(strlen(equals_sign) + 1);
                    strcpy(result, equals_sign);
                }
            }
            s = strtok(0, "&");
        }
        free(tag_list_copy);
    
        return result;
    }
    
    int main()
    {
        char a[]="name=RRR&school=AAA&roll=111&address=SSS";
    
        char* name    = getTagValue(a, "name");
        char* school  = getTagValue(a, "school");
        char* roll    = getTagValue(a, "roll");
        char* address = getTagValue(a, "address");
        char* bad     = getTagValue(a, "bad");
    
        if (name)    printf("%s\n", name);
        if (school)  printf("%s\n", school);
        if (roll)    printf("%s\n", roll);
        if (address) printf("%s\n", address);
        if (bad)     printf("%s\n", bad);
    
        free(name);
        free(school);
        free(roll);
        free(address);
        free(bad);
    
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

      检查strtok 函数。您可以使用它在 &amp; 上拆分您的 toSplit 字符串,并在每次迭代时再次拆分 = 以查看标签是否与您想要的匹配。

      【讨论】:

        【解决方案3】:

        使用标准库的 strtok() 系列: http://www.cplusplus.com/reference/clibrary/cstring/strtok/

        【讨论】:

          【解决方案4】:
            char * p[10], temp;
            temp = strtok(str,"&");
            int i=0;
            while (temp != NULL)
            {
              p[i++] = temp;
              temp = strtok (NULL, "&");
            }
          

          然后您可以使用"=" 作为分隔符,对每个参数单独使用strtok。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-07
            • 2014-10-15
            • 1970-01-01
            • 2012-02-25
            • 2017-10-27
            • 1970-01-01
            • 1970-01-01
            • 2019-04-01
            相关资源
            最近更新 更多