gpt4 book ai didi

c - "Pattern matching"并在 C 中提取

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:59 26 4
gpt4 key购买 nike

我需要解析很多文件名(我猜最多 250000 个),包括路径,并从中提取一些部分。

这是一个例子:

原文:/my/complete/path/to/80/01/a9/1d.pdf

需要:8001a91d

我正在寻找的“模式”总是以“/8”开头。我需要提取的部分形成一个 8 位十六进制数字字符串。

我的思路如下(简单演示):

/* original argument */
char *path = "/my/complete/path/to/80/01/a9/1d.pdf";

/* pointer to substring */
char *begin = NULL;

/* final char array to be build */
char *hex = (char*)malloc(9);

/* find "pattern" */
begin = strstr(path, "/8");
if(begin == NULL)
return 1;

/* jump to first needed character */
begin++;

/* copy the needed characters to target char array */
strncpy(hex, begin, 2);
strncpy(hex+2, begin+3, 2);
strncpy(hex+4, begin+6, 2);
strncpy(hex+6, begin+9, 2);
strncpy(hex+8, "\0", 1);

/* print final char array */
printf("%s\n", hex);

这行得通。我只是觉得这不是最聪明的方法。并且可能存在一些我自己看不到的陷阱。

那么,有人建议这种指针移动方式有什么危险吗?您认为有何改进之处?

C 是否提供这样的功能 s|/(8.)/(..)/(..)/(..)\.|\1\2\3\4| ?如果我没记错的话,某些脚本语言具有类似的功能;如果你明白我的意思。

最佳答案

C 本身不提供此功能,但您可以使用 POSIX 正则表达式。它是一个功能齐全的正则表达式库。但是对于像您这样简单的模式,这可能是最好的方法。

顺便说一句,比起strncpy,更喜欢memcpy。很少有人知道 strncpy 有什么用。我不是他们中的一员。

关于c - "Pattern matching"并在 C 中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184313/

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