gpt4 book ai didi

c - 从路径中删除字符 (cstring)

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:43 25 4
gpt4 key购买 nike

我有一个文件列表,但有些看起来像这样:

Got file //efi/./refit/icons/tool_rescue.icns

问题是,我需要计算文件的层级深度(意思是,计算/'s。)我想从字符串中删除不需要的 ./'s、//'s 等。下面是我现在的代码。唯一的问题是,随着它的运行,我得到了一些这样的路径

Got file /Users/.bin/tcsh

那个文件似乎是/Users/../bin/tcsh。我知道该功能是一个好的开始,但在正确的方向上提供一点帮助会很好。

void minimize_path(char *s)
{
int i, j;
do
{
for (i = 0; i < strlen(s); i++)
{
if (s[i] == '/' && s[i + 1] == '/') //double /
for (j = i; j < strlen(s) + 1; j++)
s[j] = s[j + 1];
if (s[i] == '.' && s[i + 1] == '/')
for (j = i; j < strlen(s) + 1; j++)
s[j] = s[j + 2];
}
} while (strstr(s, "//") != NULL);
}

最佳答案

这消除了双点:

     if (s[i] == '.' && s[i + 1] == '/')
for (j = i; j < strlen(s) + 1; j++)
s[j] = s[j + 2];

也许这会更好地验证前面没有点:

     if ((i == 0 || (i > 0 && s[i-1] != '.')) && s[i] == '.' && s[i + 1] == '/')
for (j = i; j < strlen(s) + 1; j++)
s[j] = s[j + 2];

注意:如果您想以“正确的方式”执行此操作,您可能需要查看 lexical analysistokenization .

realpath如果您可以使用可用的库函数,则是另一种选择:

reuts@reuts-K53SD:~/cc$ cat test.c 
#include <stdio.h>
#include <limits.h> // PATH_MAX

int main(int argc, char ** argv)
{

char rp[PATH_MAX+1];
realpath("/usr/../usr/./bin", rp);
printf("%s\n", rp);

return 1;
}
reuts@reuts-K53SD:~/cc$ gcc test.c && ./a.out
/usr/bin

关于c - 从路径中删除字符 (cstring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23364385/

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