使用strtok()在C中分隔文件路径

时间:2013-12-30 04:13:52

标签: c delimiter

在我当前的代码中,我尝试传入一个文件路径,将文件路径分隔"/",然后使用一个名为categories的数组中的每个元素检查每个分隔值。 for循环。如果数组中的任何元素使用strstr()作为子字符串匹配,它将返回元素的值,否则它将返回"Others"
我设法生成了我想要的输出,但是我意识到每当类别数组中有偶数个元素时,输出将是文件路径中的值的1,例如
如果文件路径是

"/a/b/Lib/Contact/c"

如果类别是

char *categories[] = {"Library","Applications","Contact","dsdfd"};  

输出为b 这是我的代码供您参考:

const char *categorize(char*path)
{
    int i = 0;
    char str[1024];
    char *token;
    char *delim = "/";
    char *categories[] = {"Library","Applications","Contact","dsdfd"};
    bool check = false;

    strcpy(str,path);
    token = strtok(str,delim);
    while (token !=NULL)
    {
        if(check == true)
            break;

         //printf("%s\n",token);
        for (i = 0; i <(sizeof(categories)/sizeof(char*)); i++)
        {
            if(categories[i] == NULL)
                break;
            if(strstr(token, categories[i]))
            {
                check = true;
                break;
            }
        }
        token = strtok (NULL, delim);
    }
    if (check == true)
        return "Others";
    else
    return categories[i];

}

编辑:我遇到了另一个问题。如果文件路径不包含任何子字符串,我尝试使用测试用例。它应该返回“其他”,但它会返回“/” Edit2:我有点通过将if语句更改为check == true来解决问题。但是,我意识到我的代码在这里并不好,@LưuVĩnhPhúc和@fasked在评论中提到了我希望可能修复它。

1 个答案:

答案 0 :(得分:0)

将您的代码更改为

 for (i = 0; i <(sizeof(categories)/sizeof(char*)); i++)

sizeof(categories)将给出你的16个字节(大小为4个字符*),你必须用每个char *大小来区分它们以获得类别中的元素数量;