string tokenizer in c
Moderatore: Staff
Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
string tokenizer in c
ciao!
lo so che questo non è il miglior forum per parlare di programmazione, ma vi chiedo un aiutino lo stesso.
avrei bisogno di creare un tokenizer per splittare una stringa usando come delimitatori delle stringhe (e non singoli caratteri).
mi potete consigliare una libreria per poterlo fare senza scomodare le regexp?
grazie
lo so che questo non è il miglior forum per parlare di programmazione, ma vi chiedo un aiutino lo stesso.
avrei bisogno di creare un tokenizer per splittare una stringa usando come delimitatori delle stringhe (e non singoli caratteri).
mi potete consigliare una libreria per poterlo fare senza scomodare le regexp?
grazie
- Sari
- Linux 3.x

- Messaggi: 584
- Iscritto il: mer 16 feb 2005, 0:00
- Slackware: 12.1
- Kernel: 2.6.24
- Desktop: Gnome
- Località: Verona
prova a dare un'occhiata a Glib, magari c'e' qualcosa che fa al caso tuo.
http://developer.gnome.org/doc/API/2.0/glib/index.html
sopratutto la sezione
http://developer.gnome.org/doc/API/2.0/ ... tions.html
http://developer.gnome.org/doc/API/2.0/glib/index.html
sopratutto la sezione
http://developer.gnome.org/doc/API/2.0/ ... tions.html
grazie proverò a vedere!Sari ha scritto:prova a dare un'occhiata a Glib, magari c'e' qualcosa che fa al caso tuo.
http://developer.gnome.org/doc/API/2.0/glib/index.html
sopratutto la sezione
http://developer.gnome.org/doc/API/2.0/ ... tions.html
EDIT: mi sa che ci hai preso in pieno! grandioso.
se serve a qualcun'altro la funzione è g_strsplit () che potete trovare a questo indirizzo:
http://developer.gnome.org/doc/API/2.0/ ... g-strsplit
- elettronicha
- Master

- Messaggi: 1712
- Iscritto il: mer 13 apr 2005, 0:00
- Località: Torino
- Contatta:
Senza resposabilita', prova:
Codice: Seleziona tutto
#include <stdio.h>
#include <strings.h>
int tokenizza(char *stringa, char delim[][10], int numdelim, char tokarray[][100])
{
int cnt1=0, cnt2=0; // contatori.
int lunghstr=0; // lunghezza della stringa passata
char *nuovastringa; // la stringa da analizzare si accorcia man mano che si scompone in tokens
char *iniziotoken; //
char *primoiniziotoken; // puntatori di lavoro usati nello scan della stringa passata
char *finetoken; //
nuovastringa=stringa;
lunghstr=strlen(stringa);
while(1)
{
iniziotoken=0;primoiniziotoken=0;finetoken=0;
for (cnt1=0;cnt1<numdelim;cnt1++) // questo ciclo trova la prima stringa delimitatrice tra quelle
{ // passate in delim[][10]
printf("nuovastringa: %s delim[%d]: %s\n", nuovastringa, cnt1, delim[cnt1]);
iniziotoken = strstr (nuovastringa, delim[cnt1]); // verifica l'esistenza del delimitatore nella stringa
if (iniziotoken )
{
if (primoiniziotoken)
{
if (iniziotoken < primoiniziotoken) // si accerta di trovare la prima occorrenza
primoiniziotoken = iniziotoken; // di una delle stringhe delimitatrici
finetoken = primoiniziotoken + strlen(delim[cnt1]);
}
else
{
primoiniziotoken = iniziotoken;
finetoken = primoiniziotoken + strlen(delim[cnt1]);
}
}/*** End if (primoiniziotoken) ***/
}/*** End for(cnt1=0;cnt1<numdelim;cnt1++) ***/
if (primoiniziotoken) // se e' stata trovata almeno una delimitazione
{
primoiniziotoken[0]=0; // mette lo 0 di termine stringa dove inizia la delimitatrice
if (strlen(nuovastringa)) // Se non e' una stringa vuota (nel caso la stringa da scomporre inizia con un delimitatore)
{
strcpy(tokarray[cnt2],nuovastringa); // copia la stringa nell'array di ritorno
cnt2 ++;
}
nuovastringa=finetoken; // la nuova stringa da analizzare comincia dopo
}/*** End if (iniziotoken) ***/ // la fine del delimitatore
else
{
if ((int)nuovastringa < ((int)stringa+lunghstr )) // controlla se c'e' rimasto qualche carattere utile
{
strcpy(tokarray[cnt2],nuovastringa);
cnt2 ++;
}
return(cnt2);
}/*** End else ***/
}/*** End while(1) ***/
return(cnt2);
}
int main()
{
char strng[100]; // stringa da scomporre
char dlm[5][10]; // array con le stringhe delimitatrici
char tokarr[20][100]; // array per le sottostringhe trovate da tokenizza()
int numd=0; // numero di stringhe delimitatrici
int numret=0; // valore ritornato da tokenizza(), cioe' quanti tokens sono stati trovati
int cnt=0; // contatore per il ciclo for che mostra i risultati
strcpy(strng,"Tanto va il gatto al lardo"); // esempio stringa da scomporre
strcpy(dlm[0],"to"); // Stringhe delimitatrici: "to"
strcpy(dlm[1],"ar"); // e "ar"
numd=2; // Sono due
numret=tokenizza(strng, dlm, numd, tokarr); // chiamata alla sub
for(cnt=0;cnt<numret;cnt++)
printf("token %d: #%s#\n",cnt,tokarr[cnt]); // mostra il risultato
return(0);
}
correzione:
la seconda riga:
in linux deve essere:
e poi si puo' commentare o cancellare la riga 21:
(era usata per debugging).
Ciao
la seconda riga:
Codice: Seleziona tutto
#include <strings.h>Codice: Seleziona tutto
#include <string.h>Codice: Seleziona tutto
printf("nuovastringa: %s delim[%d]: %s\n", nuovastringa, cnt1, delim[cnt1]);Ciao

