PDA

Visualizza la versione completa : [c++] trasformazione di una stringa in un array di valori.


andry80
05-02-2005, 15:48
Salve a tutti,
avrei un problemino con il seguente codice:

void Open(char *pippo)
{
char ch;
ifstream in(pippo);
while(in){
in.get(ch);
cout << ch;}
in.close()
}

l'otput è questo
asb 10 asc 20 asv 30 asn 2

Come posso trasformare questa sequenza in un array che contiene solo i valori numerici {10,20,30,2}????
Grazie a tutti per l'aiuto

anx721
05-02-2005, 15:59
Io ti direi innanzitutto di leggere dal file singole parole ad esempio con

cin >> s;

dove s è una string; poi puoi trasformare la stringa in numero ad esempio con il metodo atoi invocato sull'array di caratteri che rappresenta la stringa; la trasformazine la effetui solo sulle stringhe che iniziano con un carattere numerico. Comunque dipede da come è formattato il file da cui leggi; se sei sicuro che si alternano stringhe e numeri ad esempio puoi evitare il controolo del primo carattere.

andry80
05-02-2005, 16:10
in realtà non si alternano sempre una parola ed un numero ma a me servirebbe semplicemente un metodo che mi permetta , come fa lo split in c#, di usare lo spazio ' ' come delimitatore per creare un array.

andry80
05-02-2005, 16:14
Mi va bene, come risultato, anche un array di questo tipo:
char ch[] = {abs,5,ase,20,30};

perchè in realtà a me servono solo alcuni valori ,i cui indici sono fissi.
Nell'esempio precedente a me serve estrapolare solo i 2 valori 5 e 20
cioè ch[1] e ch[3] che poi con l'ATOI trasformerò in valori interi.

Grazie

anx721
05-02-2005, 16:20
Se sai che una riga del file non contiene piu di n stringhe dichiara un array di n string e leggi le varie string con cin >>

andry80
05-02-2005, 16:29
e se non conosco il numero di stringhe??

anx721
05-02-2005, 16:39
Se a te interessano tutte le stringhe te le puoi accumulare in una lista che implementi a mano o puoi utilizzare un vector o una deque per inserire le stringhe

andry80
06-02-2005, 13:31
Scusami ma mi sono un po perso.
IO devo leggere in un file:
ifstream ins("test");

devo poi leggere ogni riga di questo file (e so che ogni riga è del tipo :"prova 12" , quindi con 2 parole separate dallo spazio centrale), e devo prendere,trasformandolo in un intero, il valore più esterno, in questo caso 12.

anx721
06-02-2005, 15:03
se devi leggere il secondo elemento di ogni riga basta fare un ciclo con le seguenti operazioni:

string s;
innn >> s;
int x;
innn >> x;


all'interno di x ti trovi l'intero e puoi metterlo dove vuoi.

andry80
06-02-2005, 17:02
Grazie
Ora provo così

Loading