Parser tekstu

0

Dzień dobry : )

Piszę swój pierwszy prosty komunikator , przesyłam dane tak samo jak w protocole IRC , mam pytanie jak najlepiej napisać parser dla tekstów typu : "JOIN &foo fubar " . Używać Tablic charów , może stringów z cpp ? Dane potem trzymać w tablicy ?

Być może ktoś ma przykład , robionego profesjonalnie takiego parsera , to prosiłbym o wklejenie .

Z góry dziękuję za pomoc .

Proszę o wyrozumiałość to moje pierwsze poważniejsze parserowanie tekstu.

0
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char* get_token(char**);

int main(int argc, char** argv) {
	char* buffer = "COMMAND arg1 arg2\n";
	char* tmp = buffer;
	char* arg = NULL;
	char* command = get_token(&tmp);
	printf("%s\n", command);
	while(arg = get_token(&tmp))
		printf("Arg: %s\n", arg);
	return EXIT_SUCCESS;
}

/* Funkcja zwraca wskaźnik na nowo przydzielony obszar pamięci 
 * zawierający token. Wskażnik in zostaje zmieniony tak, aby
 * wskazywał pamięc za wczytanym tokenem. W przypadku końca
 * bufora zwraca NULL.
 */
char* get_token(char** input) {
	char* in = *input;
	if(*in == '\0' || *in == '\n')
		return NULL;
	if(isspace(*in)) {
		while(isspace(*in)) {
			if(*in == '\n')
				return NULL;
			in++;
		}
	}
	char* tmp = in;
	while(!isspace(*tmp) && *tmp != '\n' && *tmp != '\0') {
		tmp++;
	}
	char* token = (char*)malloc((tmp - in + 1) * sizeof(char));
	memcpy((void*)token, (void*)in, (tmp - in) * sizeof(char));
	*input = tmp;
	return token;
}

Pisane na szybko, może zawierać błędy :)
Do dodania:

  • gdy opcja jest "tak zapisana" (w cudzysłowach) ignorować spacje (ale nie wiem czy Ci to potrzebne)
0

po co pisac ubogiego strtok'a z palca?
patrz zamieszczony przyklad użycia
http://www.cplusplus.com/reference/clibrary/cstring/strtok.html
chociaz zamiast strtoka, osobiscie wole http://www.cplusplus.com/reference/clibrary/cstring/strpbrk.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1