edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
Ho un problema e spero che voi mi sappiate aiutare.
La funzione citata nel titolo mi toglie tutti gli spazi dalle stringhe!!
Mi sapete spiegare perchè?
io come token metto solo ",".
Grazie in anticipo,
edo42
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
1) mostra il codice
2) indica i dati con cui operi
3) dicci come evidenzi il problema
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
John (Ex-Member)
Pro
Messaggi: 191
Iscritto: 18/11/2007
|
Fai attenzione, strtok divide la stringa che tu passi come argomento, quindi se poi devi riutilizzarla lavora su una copia!!
Ad Esempio:
Codice sorgente - presumibilmente C++ |
char *pch; //puntatore al pezzo diviso char originale[100]="questa, stringa, sarà divisa,dove ci sono, le virgole."; char copia[100]; strcpy(copia,originale); //crea la copia pch=strtok (copia,","); //dividi la stringa (lavorando sulla copia) while (pch != NULL){ //finchè non finisce la stringa printf("%s\n",pch); //scrivi il pezzo diviso e vai a capo pch = strtok (NULL, ","); //continua a dividere } printf("\n%s\n",originale); //stampa la stringa iniziale (per vedere se funziona)
|
l'output sarà:
Codice sorgente - presumibilmente Plain Text |
questa
stringa
sarà divisa
dove ci sono
le virgole.
questa, stringa, sarà divisa,dove ci sono, le virgole.
|
spero di aver rsiposto alla tua domanda, altrimenti spiega meglio il tuo problema!
|
|
edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
no scusate ho identificato meglio il problema:
è il comando:
fscanf(ITA, "%s", temp);
che mi crea problemi.
non so perchè ma mi legge ogni parola e non tutta la riga, non capisco perchè.
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
a parte che fscanf appartiene all'I/O del C, ma cmq è fatta proprio così.
devi usare getline se vuoi una riga intera con gli spazi.
|
|
John (Ex-Member)
Pro
Messaggi: 191
Iscritto: 18/11/2007
|
è normale, tutte le funzioni scanf (sscanf,fscanf,..) con il parametro %s leggono solo una parola.
ti consiglio di utilizzare fgets, che legge tutto il contenuto di una riga di un dato file, finchè non trova un carattere di nuova linea..
ad esempio potresti fare così:
Codice sorgente - presumibilmente C# |
FILE *temp; char oneline[255]; temp=fopen("file.txt","r"); if (temp==NULL) //errore aprendo il file? return 0; while (!feof(temp)){ //finchè non finisce lo stream fgets(oneline,255,temp);//leggi una riga di lunghezza 255 caratteri dallo stream temp (in questo caso un file) e salvala in oneline (array di char, cioè una stringa) //.... eccetera eccetera... //... }
|
|
|
edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
Perfetto ora funziona tutto con fgets!!
Ancora una cosa anche se ormai non c'entra molto con il tema iniziale...
come faccio a confrontare due puntatori char, per capire se puntano allo stesso testo? posso usare strcmp.
Scusate se a volte mi esprimo un po' male...
|
|
John (Ex-Member)
Pro
Messaggi: 191
Iscritto: 18/11/2007
|
se devi solo controllare se puntano allo stesso indirizzo, cioè alla stessa variabile basta fare un semplice if confrontando gli indirizzi a cui puntano, ad esempio:
Codice sorgente - presumibilmente C++ |
int x1=23;//due variabili int x2=43;//a cui puntare int *a,*b;//i due puntatori a=&x1;//assegno i puntatori b=&x2; if (a==b) {}//così confronti se puntano allo stesso indirizzo nella memoria Stack if (*a==*b) {}//invece così, compari i loro valori
|
spero di averti aiutato!
|
|