2013-05-08 2 views
-2

Я хочу, чтобы получить некоторую информацию из строки вроде этого:Как разобрать путь, как строки в C

[email protected]/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 

[email protected]/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 

информации я хочу, чтобы получить первое слово «добавить»/«удалить» и последнее слово "sdh1".

Я был бы очень признателен за вашу помощь!

Спасибо!

+5

Здравствуйте, добро пожаловать в SO! Что вы пробовали? Что не сработало? Пожалуйста, покажите нам, что вы сделали некоторые исследования. –

ответ

0

Вы можете посмотреть стандартную функцию strtok(3), она позволяет разделить строку на подстроки, разделенные символом, в вашем случае '/'.

Другой, и, возможно, более простой способ в этом случае использует index(3) and rindex(3). Используйте индекс, чтобы найти первый '@' и скопируйте с начала на этот индекс. И используйте rindex для поиска последнего '/' и скопируйте его из этого индекса в конец строки.

+0

strtok уничтожает строку, в которой он работает, поэтому, если вы хотите сохранить исходную строку, затем скопируйте ее в рабочую строку, чтобы перейти к strtok. –

1

поиск '@' по strchr и искать последний '/' по strrchr

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

int main(void){ 
    char str1[]="[email protected]/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[]="[email protected]/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; 
} 
+3

Было бы неплохо, если бы вы не представили фактический код таким вопросам. Мы не хотим поощрять «дать мне кодз плз» типа вопросов. – Shahbaz

+0

Я думаю, что образец поможет начинающим понять. – BLUEPIXY

+0

@Shahbaz: Извините, но это просто глупо. Если вопрос не достаточно хорош, закройте его. Но в остальном ответы всегда должны быть как можно более полезными и подробными. И, скажем, кто-то ищет ту же проблему, а фактический код - именно то, что они хотят найти. – Timo

0

Посмотрите на POSIX функции basename и dirname, если вы находитесь на системе POSIX.

Смежные вопросы