我想从字符串中获取一些信息:
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”。
我非常感谢你的帮助!
谢谢!
答案 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函数basename
和dirname
。