Comment cela fonctionne-t-il?C Tokenizer - Comment ça marche?
Je sais l'utiliser, vous passez:
- début: string (ex: "Article 1, point 2, point 3")
- delim: délimiteur (par exemple "")
- Tok: référence à une chaîne qui contiendra les
- nextpos jeton (facultatif): référence à une position dans la chaîne d'origine où le jeton suivant commence
- sdelim (en option): pointeur sur un caractère qui tiendra la départ délimiteur du toke n
- edelim (en option): pointeur sur un caractère qui tiendra délimiteur la fin du jeton
code:
#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;
}
Je reçois la plupart de l'exception:
dictionary[*delim/32] |= 1 << *delim % 32;
et
dictionary[*start/32] & 1 << *start % 32
Est-ce magique?
Pourquoi pensez-vous que c'est magique? – ChaosPandion
Je sais que ces deux lignes font quelque chose pour trouver des délimiteurs, mais il le fait sans boucler à travers la chaîne de délimitation? –