Как можно на си распарсить строку содержащею в себе названия и расширения '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);
→ Ссылка