PDA

View Full Version : [C++] Leggere numeri da file di testo


Aenima1891
18-03-2009, 09:19
salve a tutti, sto provando a leggere un file di testo contenente dei numeri ed a memorizzarli in stringhe, e successivamente mostrare queste stringhe sul monitor

questo è il mio file di testo

0b10100 0d478 0x7 0xff 11110000

e questo è il mio codice

#include <iostream>
#include <fstream>

using namespace std;

int main(void)
{
ifstream is("Numeri.txt");
int count=0;
char *str;
int position=0;
int tmp_pos = 0;

while(!is.eof()){
while(is.peek() !=' '){
tmp_pos++;
is.seekg(tmp_pos);
}
is.seekg(position);
count = tmp_pos-position+1; //+1 for '\0'
str = new char[count+1];
is.getline(str,count);
str[count] = '\0';
cout << str << endl;
position = ++tmp_pos;
is.seekg(position);
delete [] str;

}
return 0;
}


Riesco cosi a stampare la prima stringa, ma poi il programma si blocca
Cosa sbaglio? (non sono molto pratico nella manipolazione dei files)

Grazie
thanks

Tommo
18-03-2009, 10:26
Credo sia molto più semplice usare un vector di string, e l'operatore >> di ifstream...
sei obbligato ad usare char* e le operazioni del puntatore (seek, peek, etc)?

Aenima1891
18-03-2009, 10:59
il fatto è che volevo fare in modo di allocare dinamicamente le stringhe:
prima mi trovo il numero di caratteri count che compongono il singolo numero, e successivamente alloco la stringa di dimensione count+1 in modo da inserire anche il carattere di fine stringa \0

Aenima1891
18-03-2009, 11:13
#include <iostream>
#include <fstream>
#include <string.h>
#define MAXSIZE 10

using namespace std;

int main(void)
{
ifstream is("Numeri.txt");

char str[MAXSIZE];
memset(str, 0, MAXSIZE);

while(!is.eof()){
is >> str;
cout << str << endl;
}
return 0;
}

questa versione è molto semplificata ma funziona.

e se invece volessi fare come detto prima? senza usare MAXSIZE?

DanieleC88
18-03-2009, 13:39
Scusa, ma hai realmente bisogno di leggere dentro un buffer di caratteri allocato dinamicamente? Fai molto prima a leggere usando ciò che ti offre std::string, poi alle brutte il buffer lo duplichi con strdup(buffer.c_str()). :)

ciao ;)