在我当前的代码中,我尝试传入一个文件路径,将文件路径分隔"/"
,然后使用一个名为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在评论中提到了我希望可能修复它。
答案 0 :(得分:0)
将您的代码更改为
for (i = 0; i <(sizeof(categories)/sizeof(char*)); i++)
sizeof(categories)将给出你的16个字节(大小为4个字符*),你必须用每个char *大小来区分它们以获得类别中的元素数量;