向tokenizer解释字符串的C代码

时间:2015-09-15 18:30:21

标签: c algorithm

我是C的新手,我有一个代码,但我不理解其中的一部分。

typedef struct
{
    size_t count;
    char** strings;
} Tokens;

Tokens Tokenize(char* String, char Split)
{
    Tokens t;
    t.count = 1;

    for (size_t i = 0; String[i] != 0; i++)
    {
        if (String[i] == Split)
            t.count++;
    }

    t.strings =(char**) malloc(sizeof(char*)* t.count);

    if (t.count > 0)
        t.strings[0] = String;

    for (size_t i = 0, j = 1; String[i] != 0; i++)
    {
        if (String[i] == Split)
        {
            t.strings[j] = &String[i + 1];
            String[i] = 0;
            j++;
            i++;
        }
    }
    return t;
}

我不理解的部分是指针char的指针如何标记字符串部分,特别是那行t.strings [j] =& String [i + 1];

如果有人能够对流程进行可视化,我将不胜感激。 感谢

1 个答案:

答案 0 :(得分:1)

  

特别是那行t.strings [j] =& String [i + 1];

在该行中,String[i]是找到的分隔符char(Split),因此String[i + 1]是下一个标记字符串开头的char。然后,该char(&String[i + 1])的地址是下一个标记字符串的字符串指针/地址。

t.strings[]只是String中可以找到的字符串指针的集合(数组)。