Как можно на си распарсить строку содержащею в себе названия и расширения 'Hello.txt'?
Нужно распарсить строку на си типа "Hello.txt" разделить на "Hello" и "txt". Есть какие средства на си для этого?
Ответы (2 шт):
Автор решения: neon1ks
→ Ссылка
Для задачи разбиения на лексемы рекомендуют функции strtok_r (POSIX) или strtok_s (MSVC). Есть еще не потокобезопасная функция strtok.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char input[] = "Hello.txt";
const char *delim = ".";
char *token;
char *next_token;
token = strtok_r(input, delim, &next_token);
while(token) {
puts(token);
token = strtok_r(NULL, delim, &next_token);
}
return 0;
}
Дополнительно рекомендую почитать книгу Бен Клеменс — Язык C в XXI веке, страница 199, песнь о strtok.
Автор решения: Harry
→ Ссылка
Там писать нечего...
char filename[] = "Hello, world.txt";
char name[100] = {0}, ext[100] = {0};
char * dot = strrchr(filename,'.');
if (dot)
{
strcpy(ext,dot+1);
*dot = 0;
}
strcpy(name,filename);
printf("Name: \"%s\", ext: \"%s\"\n",name,ext);