[英]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.