Выделить из строки название первого каталога - C (СИ)
Формулировка задачи:
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственное имя и, возможно, расширение. Выделить из этой строки название первого каталога (без символа-разделителя: «/». «//» или «\»). Если файл содержится в корневом каталоге, то вывести символ «.» (обозначение точки монтирования файловой системы).
Решение задачи: «Выделить из строки название первого каталога»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void getFirstDir(char * fn, char * buf) {
int c = 0;
char *i, *s = strchr(fn, '\\');
if (s == NULL) {
return;
}
char *e = strchr(s + 1, '\\');
if (e == NULL) {
buf[0] = '.';
buf[1] = 0;
return;
}
for (i = s + 1; i < e; i++) {
buf[c++] = *i;
}
buf[ c ] = 0;
return;
}
int main(int argc, char * argv[]) {
char *filename_one = "D:\\Android-Studio\\bin\\studio.exe";
char *filename_two = "D:\\Ho-ho-ho.avi";
char buf[256];
getFirstDir(filename_one, buf);
printf("One: %s\n", buf);
getFirstDir(filename_two, buf);
printf("Two: %s\n", buf);
system("pause");
return 0;
}
Объяснение кода листинга программы
- В функции
getFirstDirприведена строкаfn, которую необходимо проанализировать. - Строка
fnищется первое вхождение символа '\' с помощью функцииstrchr. - Если
strchrвернулNULL, то в текущей строке каталогов нет. - Если
strchrвернул ненулевой указатель, то вsхранится позиция первого '\' в строкеfn. - Следующий символ после
sпроверяется на наличие '\'. - Если
eравенNULL, то вbufзаписывается текущий каталог ('.'). - Если
eне равенNULL, то вbufзаписывается подстрока междуsиe. - В
mainприведены две строкиfilename_oneиfilename_two, которые передаются в функциюgetFirstDir. - Результат работы функции
getFirstDirвыводится на экран с помощью функцииprintf. - В конце программы вызывается функция
system(pause), чтобы программа не закрылась сразу, а ожидала нажатия клавиши. - Функция
mainвозвращает0, что означает успешный конец работы программы.