|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
[C]Contare occorrenze di parole in una stringa
Ciao
ho un file con stringhe di questo tipo: A punto punto stilo clio stilo B punto stilo clio punto punto voglio fare una lista con questa struct struct car{ char nomemacchina[20]; int numerodisponibili; struct car *next; } come faccio ad estrarre da una stringa le singole parole e raggruppare quelle dello stipo? Forse contando gli spazi usando ciclo di strtok? |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
In ogni caso, per la strtok() e la strtok_r(): Never use these functions. If you do, note that: These functions modify their first argument. These functions cannot be used on constant strings. The identity of the delimiting character is lost. The strtok() function uses a static buffer while parsing, so it's not thread safe. Use strtok_r() if this matters to you. |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
grazie mi sa che la strtok la lascio perdere!
che funzione legge una parola fino allo spazio? Cmq in realtà volevo fare una lista di liste così struct car{ char nome_macchina[10]; int quantità; struct car *succ; } struct sede{ char nomesede[10]; //prima le ho indicate con A e B struct sede *next; struct car *c_next; } devo raggruppare i vari tipi di macchine per A per B ecc. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Dannazione!! Ho un programma che usa strtok per prendermi solo 4 caratteri dall'interno di una stringa: Codice:
newinput = strtok(input, ">"); newinput = strtok(NULL, "<"); Cosa posso usare al posto di strtok quindi?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Dai alla fine strtok() non è il male
Mai quanto la gets(), insomma |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Solo che siccome sono agli inizi,non vorrei prendere l'abitudine di scrivere codice insicuro.Mi sto documentando per vedere come fare in altro modo
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Secondo me se stai imparando è inutile complicarti la vita con la programmazione "sicura", è meglio che impari tutto quello che c'è da imparare, anche la gets() Poi quando ti senti pronto, cominci a leggere documentazione piu' cazzuta. Altrimenti se cominci a programmare facendoti troppi problemi ti passa la voglia. Secondo me, ovviamente. Poi se la cosa ti affascina e ti riesce senza intoppi non c'è nulla di male, anzi. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Della gets() lo sapevo,e difatti ho imparato subito ad usare fgets() al suo posto. Vorrei fare lo stesso anche per quest'altro problema perchè quando prendo un'abitudine,poi per me è dura abbandonarla.Meglio quindi imho cominciare nella giusta direzione e,aggiungo,sapere anche il perchè alcune funzioni sono da scartare rispetto ad altre.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
sentite:
dopo aver "preso" preso una stringa dal file con fgets, sscanf non posso usare sscanf perchè non so quante macchine sono elencate nella stringa vero?? Cmq si credo che duplicando la stringa si possa usare strtok per contare gli spazi. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
sscanf la puoi usare, basta che tu legga una parola alla volta...
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
se io faccio un ciclio while per leggere con sscanf cosa metto come condizione per uscire dal ciclo? non capisco se sscanf arrivata all'ultima parola lascia un puntatore a NULL o casa fa
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ti prendi come buffer di sscanf un puntatore alla prima lettera valida...
stringa contiene la stringa da leggere... Codice:
char *p = stringa;
do {
sscanf(p, "%s", nuova_parola);
if((p + strlen(nuova_parola) == '\0')
break;
p += strlen(nuova_parola) + 1;
} while(nuova_parola[0] != '\0' || )
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
grazie mille, hai ragione! Non avevo pensato a \0
Gli spazi alla fine per ora non ci sono, il file lo scrivo io! Cmq ci penso.. Grazie ancora Ultima modifica di xglobusx : 05-09-2005 alle 13:58. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:05.



















