2013-12-04 3 views
0

У меня есть строка (имя файла), и я хотел бы извлечь строку между персонажами, например:Как я могу разделить строку между двумя конкретными символами?

string="/export/aibn84_2/SED/Sbc_cww.sed" 

Мне нужно хранить строку между последней "/" и "_cww.sed", который будет "sbc", в массив, чтобы использовать его позже. Может ли кто-нибудь дать мне несколько советов?

P.S. Если я хочу прочитать список файлов и отделить эту часть их имен, а затем определить строковый массив и сохранить их в элементах массива, как его применить?

+0

Будут ли символы до 'Sbc_cww.sed' всегда постоянными? –

+1

1) ищите последний '/' 2) ищите «_cww.sed» после этого. 3) используйте символы от 1 до 2 в качестве источника для копирования требуемой строки. – wildplasser

+0

Посмотрите на функцию strtok. – Sevauk

ответ

0

Есть две функции, которые приходят в использовании:

strrchr -> Расположить последнее вхождение символа в строке

strncpy -> Скопируйте первый NUM символы из строки

strstr -> Возвращает указатель на первое вхождение str2 в str1

char str[] = "/export/aibn84_2/SED/Sbc_cww.sed"; 
char* pch; 
pch=strrchr(str,'/'); 
char* pch2; 
pch2=strstr(str,"_cww.sed"); 
char value[40]; 
strncpy(value, pch+1, pch2-(pch+1)); 
printf("%s\n", value); 
+1

Это хорошо, но я думаю, что ему нужно будет использовать 'strstr (str," _ cww.sed "), потому что' _' может присутствовать и в другом месте – Jekyll

+0

@Jekyll Спасибо за отзыв Я обновил свой ответ. –

+0

Ошибка strncpy() (предполагается, что значение [] инициализируется нулями (а это не так) и/или «_cww.sed», за которым следует символ NUL (что не обязательно так). Также нет проверьте, что pch1 и pch2 являются NULL (или pch2 wildplasser

0
#include<stdio.h> 
#include<string.h> 
int main(){ 
    char str[] = "/export/aibn84_2/SED/Sbc_cww.sed"; // define the full array 
    char *str_start = strrchr(str, '/')+1; // locat the first character after the last '/' 
    char *str_end = strstr(str_start, "_cww.sed"); // locat "_cww.sed" after the last '/' 
    char str_new[str_end-str_start+1]; // define the new array 
    strncpy(str_new, str_start, str_end-str_start); // copy the elements bitween the start and the and 
    str_new[str_end-str_start] = '\0'; // terminate the new array with the null character 
    puts(str_new); // print the new array 
    return 0; 
} 
Смежные вопросы