如何在C中解析类似路径的字符串

时间:2013-05-08 07:45:50

标签: c parsing

我想从字符串中获取一些信息:

add@/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/host26/target26:0:0/26:0:0:0/block/sdh/sdh1

remove@/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/host26/target26:0:0/26:0:0:0/block/sdh/sdh1

我想要的信息是第一个单词“add”/“remove”和最后一个单词“sdh1”。

我非常感谢你的帮助!

谢谢!

3 个答案:

答案 0 :(得分:1)

通过strchr搜索'@'并通过strrchr搜索最后'/'

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

int main(void){
    char str1[]="add@/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/host26/target26:0:0/26:0:0:0/block/sdh/sdh1";
    char str2[]="remove@/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/host26/target26:0:0/26:0:0:0/block/sdh/sdh1";
    char first[32],last[32], *cp;
    char *datas[] = {str1, str2 };
    int i;

    for(i=0;i<2;++i){
        cp=strrchr(datas[i], '/');
        strcpy(last, cp+1);
        cp=strchr(datas[i], '@');
        *cp='\0';//destroy the original!!
        strcpy(first, datas[i]);
        printf("%s, %s\n", first, last);
    }
    return 0;
}

答案 1 :(得分:0)

您可以查看标准函数strtok(3),它允许您将字符串拆分为由某些字符分隔的子字符串,在您的情况下&#39; /&#39;。

在这种情况下,另一种也许更简单的方法是使用index(3) and rindex(3)。使用index定位第一个'@'并从头开始复制到该索引。并使用rindex找到最后的'/',并从该索引复制到字符串的末尾。

答案 2 :(得分:0)

如果您使用POSIX系统,请查看POSIX函数basenamedirname