Выделить из строки название первого каталога - 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
, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д