[英]To get directory path in reverse from file path
假设我有一个文件名/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()
就留给读者自己练习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.