PDA

View Full Version : Spaccare una stringa in C


pablo79
03-05-2002, 14:01
Buon pomeriggio a tutti.

Ho una stringa fatta così "CODE01|CODE02|CODE03|CODE04|"
come posso spaccarla dove c'é il "|" ed assegnare ogni codice ad una variabile diversa??

Ho provato con sscanf() ma non ci sono riuscito.

Grazie per l'aiuto. Ciao

cionci
03-05-2002, 15:54
//N è il numero massimo di stringhe che puoi avere
//K è il numero di caratteri contenuti in ogni stringa (in questo caso 6)
char *str[N+1];
char strToSplit[N*(K+1)+1];
int i = 0, j;

//qui riempirai strToSplit

str[0] = strToSplit;
while(str[i][0] != '\0')
{
++i;
str[i] = strtok(str[i-1], "|");
str[i] += strlen(str[i]) + 1;
}

for(j=0; j<i; ++j)
printf("%s\n",str[j]);

Ciao...

pablo79
03-05-2002, 16:27
Ok! Grazie cionci, questo l'ho capito!:D
E se non conosco la lunghezza delle stringhe??

Ad esempio:

CODE1|AAA|BBBBBBBB|CCCC|

come posso ottenere:

string1 =="CODE1"
string2 =="AAA"
string3=="BBBBBBBB"
string4=="CCCC"??

Esiste una funzione del tipo:

funzione(stringa_di_partenza, "%s|%s|%s|%s|",
string1,
string2,
string3,
string4)

ho devo cercare all'interno della stringa il carattere PIPE con un contatore per sapere a quale stringa assegnare la substring che ho trovato ?

Grazie

cionci
03-05-2002, 16:34
Il metodo che ho usato io funziona anche per quel caso...però devi rinunciare a dimensionare in un modo preciso strToSplit...
Dagli una dimensione piuttosto grande e fai tutto come ho scritto io...

pablo79
06-05-2002, 09:48
Scusa se rispondo solo ora, ma sai ho dovuto staccare la spina altrimenti mi mandavano all'ospedale psichiatrico :D.

Sulla riga:

str[i] += strlen(str[i]) + 1;

mi da un Expression sintax e sinceramente non riesco a capire cosa dovrebbe fare (ho tolto il + ma a quel punto compila ma non funziona).

Intanto faccio delle prove e spero tu mi possa aiutare ancora, comunque un grosso grazie!!

cionci
06-05-2002, 09:51
Strano...a me compila tranquillamente...hai incluso string.h ?

pablo79
06-05-2002, 10:28
Sì.
Adesso provo a fare un programmino che fa solo quello per vedere se così me lo compila.

pablo79
06-05-2002, 11:25
Sono un asino.

Avevo scritto str[i]+ = strlen(str[i]) + 1;
ci credo che non riusciva a compilarlo.

Grazie cionci, quella parte di programma ora funziona, adesso devo solo riuscire a far restituire le stringhe alla funzione chiamante, ma è un altro problema.

Per ora ti ringrazio tanto (al massimo ti disturberò ancora ma voglio provare a risolverlo da solo) .