Не знаю, поможет ли это, это простой токенизатор, который я использую
#include <stdlib.h>
#include <string.h>
int token(char* start, char* delim, char** tok, char** nextpos, char* sdelim, char* edelim) {
// Find beginning:
int len = 0;
char *scanner;
int dictionary[8];
int ptr;
for(ptr = 0; ptr < 8; ptr++) {
dictionary[ptr] = 0;
}
for(; *delim; delim++) {
dictionary[*delim / 32] |= 1 << *delim % 32;
}
if(sdelim) {
*sdelim = 0;
}
for(; *start; start++) {
if(!(dictionary[*start / 32] & 1 << *start % 32)) {
break;
}
if(sdelim) {
*sdelim = *start;
}
}
if(*start == 0) {
if(nextpos != NULL) {
*nextpos = start;
}
*tok = NULL;
return 0;
}
for(scanner = start; *scanner; scanner++) {
if(dictionary[*scanner / 32] & 1 << *scanner % 32) {
break;
}
len++;
}
if(edelim) {
*edelim = *scanner;
}
if(nextpos != NULL) {
*nextpos = scanner;
}
*tok = (char*)malloc(sizeof(char) * (len + 1));
if(*tok == NULL) {
return 0;
}
memcpy(*tok, start, len);
*(*tok + len) = 0;
return len + 1;
}
Параметры:
- char * start, (указатель на строку)
- char * delim, (указатель на разделители, используемые для разбиения строки)
- char ** tok, ссылка (с использованием &) на переменную char *, которая будет содержать токен
- char ** nextpos, ссылка (с использованием &) на переменную char *, которая будет удерживать позицию после последнего токена.
- char * sdelim, ссылка (с использованием &) напеременная char, которая будет содержать значение разделителя -start
- char * edelim, ссылку (с помощью &) на переменную char, которая будет содержать значение конечного разделителя
Последние три являются необязательными.
Передайте начальный адрес, разделитель - ", и передайте ссылку на символ * для хранения фактической средней строки.
Результат - вновь выделенныйСтрока, поэтому вы должны освободить ее.
int get_string(FILE *in, char *temp)
{
char *token = NULL;
/* Get the first line */
fgets(temp, STRING_SIZE, in);
printf("temp before [ %s ]\n", temp);
/* Find the second quote */
int length = token(temp, "\"", &token, NULL, NULL, NULL)
// DO STUFF WITH THE TOKEN
printf("temp after [ %s ]\n", token);
// DO STUFF WITH THE TOKEN
// FREE IT!!!
free(token);
return TRUE;
}
Токенизатор - это многофункциональный инструмент, который можноиспользуется в куче дерьма мест, это очень маленький пример.