PDA

Visualizza la versione completa : Array e stringhe in C


JackDarkNess
13-04-2005, 10:40
Ciao Butei, vi scrivo perchŔ sono dispirato...
In questi giorni mi sono reso conto di essere veramente ignorante.
Comunque, vado a esplicitare il mio problema.
Devo scrivere una funzione che prenda in ingresso una stringa e la spezzi secondo il carattere '\n' e la inserisca in un array...
Come posso fare???

floyd
13-04-2005, 10:47
char str[]="this\nis\na\ntest\nof\nstring\ntokenizing";
char *str1;

// primo token
str1 = strtok(str, "\n");

while (1) {
// successivo token
str1 = strtok(NULL, "\n");

/* check if there is nothing else to extract */
if (str1 == NULL) {
printf("Tokenizing complete\n");
break;
}
}
devi solo mettere i token in un array

JackDarkNess
13-04-2005, 11:04
Ti ringrazio per la disponibilitÓ...
Avrei un p˛ di domande...

1.La funzione strtok Ŕ all'interno delle librerie di default ?
2.while (1), cosa vuole dire 1 ?
3.NULL, perchŔ hai usat il NULL ?

Porta pazienza, ma sono un programmatore in PHP e questa purtroppo Ŕ la mia prima esperienza con il C.
Ti ringrazio molto...

floyd
13-04-2005, 11:23
strtok dovrebbe essere una funzione di string.h
while (1) vuol dire sempre, 0=false altri numeri=true
la funzione vuole la stringa nella prima chiamata, nelle successive vuole NULL

JackDarkNess
13-04-2005, 11:36
Ti rompo le scatole per l'ennesiam volta.
QUesta Ŕ la funzione che mi hai passato e dove ho fatto un p˛ di modifiche.

char string[] = "From: JACOPO \r\n X-Mailer: WeB \r\n";
char seps[] = "\r\n";
char *token;

printf( "%s\n\nTokens:\n", string );
token = strtok( string, seps );

while( token != NULL )
{
printf( " %s\n", token );
token = strtok( NULL, seps );
}

La mia domanda Ŕ come posso fare per mettere la stringa spezzattato dentro ad un array?

floyd
13-04-2005, 11:49
char *s; // la stringa originale
int numeroDiToken = 1;
while ((s = strchr(s, '\n') != NULL)
numeroDiToken++;
poi crei l'array di dimensioni numeroDiToken
se devi cercare un separatore formato da + di 1 carattere
:bh˛:
io scriverei una funzione a mio uso e consumo

JackDarkNess
13-04-2005, 12:02
Spero che tu possa perdonarmi...
Ma la mia testa da demente non capisce...Purtroppo dovrei andare a zappare i campi, con tutto il rispetto, sicuramente mi divertirei di pi¨...
Non riesco ancora a capire come riempire l'array.Se con la funzione che mi hai passato stampo token su ogni divisione, ovvero ogni volta che strtok trova il carattere \n,non c'Ŕ un modo per, oltre a stampare token, a inserirlo in un array ?

floyd
13-04-2005, 12:12
avrai un array
char *dest[numeroDiToken];
nel ciclo metti un contatore
dest[c++] = token;
:stordita:

JackDarkNess
13-04-2005, 12:20
Tutto OK...
Non so veramente come ringraziarti.Te ne sono molto grato.
Grazie.

floyd
13-04-2005, 12:28
un biglietto prepagato per cuba?
:fagiano:

Loading