gpt4 book ai didi

c - 从文件路径反向获取目录路径

转载 作者:太空狗 更新时间:2023-10-29 11:42:08 25 4
gpt4 key购买 nike

假设我有一个文件名/A/B/C/d.txt,

我要反向打印目录路径,

/A/B/C/
/A/B/
/A/

下面是一个使用递归反向打印目录路径的程序。

#include <stdio.h>
#include <libgen.h>
#include <string.h>
#include <stdlib.h>

void parsepath(const char *dirpath)
{
char* dirPathTemp;
char* dirname;
char path[255];

dirPathTemp = strdup(dirpath);
dirname = dirname(dirPathTemp);
strcpy(path, dirname);

free(dirPathTemp);

printf("path = %s\n", path);

if (0 != strcmp(path, "/"))
parsepath(path);
}

int main(int argc, char *argv[])
{
parsepath("/A/B/C/d.txt");

return 0;
}

有没有不用递归的其他方法?谢谢。

最佳答案

以下算法很简单:每次在输入字符串中搜索最后一次出现的 '/' 时,将其替换为 '\0'(字符串结束标记) 并打印它,继续直到路径中不再有斜线。复制输入字符串是必要的,因为它必须就地修改:

#include <stdio.h>
#include <string.h>

void parsepath(const char *dirpath)
{
char *p = strdup(dirpath);
char *lastslash;
while(lastslash = strrchr(p, '/')) {
*lastslash = '\0';
printf("%s\n", p);
}
free(p);
}

int main(void) {
parsepath("/A/B/C/d.txt");
return 0;
}

注意: strrchr() 从头搜索输入字符串,这不是最优的。由于每次都需要最后一次出现斜线,所以向后搜索会更好。这就是 memrchr() 函数的作用。将 strrchr() 替换为 memrchr() 留给读者作为练习。

关于c - 从文件路径反向获取目录路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40216623/

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