|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
operare su una stringa in [C]
partendo da una striga come questa:
1.34,-1.10,pluto,54.80 come faccio per individuare i valori divisi dal separatore virgola, ovvero come posso realizzare un vettore (es vet[4]) dove: vet[0] contiene 1.34 vet[1] contiene -1.10 vet[2] contiene pluto vet[3] contiene 54.80 GRAZIEEEEEE
__________________
...meglio la carne che l'osso
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Dai uno sguardo a questa funzione, la trovi in string.h
http://www.cplusplus.com/reference/c...ng/strtok.html
__________________
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
grazie wisher!!...sono riuscito in parte a risolvere:
Codice:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
FILE *fp;
char buf[100];
char *res;
char *a;
char *mat[3][4];
int i=0;
int j;
char del[]=",";
if(argc!=2) {
printf("Hai dimenticato di inserire il nome.\n");
exit(1);
}
if ((fp = fopen(argv[1],"r"))==NULL) {
printf("impossibile aprire il file.\n");
exit(1);
}
while(1) {
res=fgets(buf, 100, fp);
if( res==NULL )
break;
printf("%s", buf);
a=strtok(buf,del);
mat[i][0]=a;
printf("\n\n %s", mat[i][0]);
for (j=1;j<4;j++) {
a=strtok(NULL,del);
mat[i][j]=a;
printf("\n\n %s", mat[i][j]);
}
i++;
}
for (i=0;i<3;++i) {
for (j=0;j<4;++j) {
printf(" %3s",mat[i][j]);
}
printf("\n");
}
fclose(fp);
return 0;
}
__________________
...meglio la carne che l'osso
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
In che senso non è corretta?
__________________
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
ho provato a utilizzare un csv di esempio:
Codice:
ds,h,y,u fs,g,t,o fg,hhg,i,sa3 Codice:
ds,h,y,u ds h y u fs,g,t,o fs g t o fg,hhg,i,sa3 fg hhg i sa3 Codice:
fg hhg g i fg hhg g i fg hhg i sa3
__________________
...meglio la carne che l'osso
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ma siccome buf è uno solo, quelli che metti nella matrice sono puntatori che puntano sempre dentro buf. Alla fine tutti quanti i puntatori puntano all'ultima cosa che è presente nel buf. O usi più buffer, o duplichi le stringhe allocando memoria dinamica con malloc.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
Quote:
__________________
...meglio la carne che l'osso
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
char *s, *s2; int len; ..... len = strlen (s); s2 = (char*) malloc (len+1); strcpy (s2, s); Alla fine sarebbe bene se deallocassi tutte le aree di memoria allocate utilizzando la funzione free(). Ti suggerisco di "spezzare" il codice in più funzioni.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
Quote:
Codice:
for (i=0;i<x;++i) {
for (j=0;j<y;++j) free(mat[i][j]);
}
__________________
...meglio la carne che l'osso
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Sì, è ok. Chiaramente 'x' deve essere il numero di righe e 'y' il numero di colonne.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:21.




















