gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:07 26 4
gpt4 key购买 nike

在我目前的代码中,我试图传入一个文件路径,用"/"分隔文件路径。 ,然后针对名为 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 在评论中提到了这一点,我希望能够修复它。

最佳答案

将您的代码更改为

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

sizeof(categories) 将为您提供 16 个字节(大小为 4 个字符 *),您必须将其与每个字符 * 大小分开以获得类别中的元素数量;

关于c - 使用 strtok() 在 C 中分隔文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20833251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com