PDA

View Full Version : [C++] String to Numero


Rizzolo
28-04-2010, 16:39
Salve a tutti,
mi vedo costretto per motivi di velocità di esecuzione, a tradurre un mio codice da matlab a c++.
Essendo parecchio niubbo in questo linguaggio mi trovo impossibilitato a dichiarare come "numeri" delle stringhe ottenute per lettura da un file di testo attraverso questo codice:


char anno[5];
char mese[3];
char giorno[3];
char gmt[4];
char deg_acc[9];
char ra_acc[9];
char long_deg[10];
char long_mm[9];
char long_ss[9];
char lat_deg[9];
char lat_mm[9];
char lat_ss[9];
char altitude[11];
char ora[5];
char minuti[5];
char secondi[7];
char ra_r[12];
char dec_r[11];

strncpy (anno,&dati[7],4);
anno[4]='\0';
strncpy (mese,&dati[20],3);
mese[2]='\0';
strncpy (giorno,&dati[31],3);
giorno[2]='\0';
strncpy (gmt,&dati[41],3);
gmt[3]='\0';
strncpy (deg_acc,&dati[48],8);
deg_acc[8]='\0';
strncpy (ra_acc,&dati[60],8);
ra_acc[8]='\0';
strncpy (long_deg,&dati[71],10);
long_deg[9]='\0';
strncpy (long_mm,&dati[83],9);
long_mm[8]='\0';
strncpy (long_ss,&dati[95],9);
long_ss[8]='\0';
strncpy (lat_deg,&dati[107],9);
lat_deg[8]='\0';
strncpy (lat_mm,&dati[119],9);
lat_mm[8]='\0';
strncpy (lat_ss,&dati[131],9);
lat_ss[8]='\0';
strncpy (altitude,&dati[142],11);
altitude[10]='\0';
strncpy (ora,&dati[160],4);
ora[4]='\0';
strncpy (minuti,&dati[172],4);
minuti[4]='\0';
strncpy (secondi,&dati[183],6);
secondi[5]='\0';
strncpy (ra_r,&dati[191],12);
ra_r[11]='\0';
strncpy (dec_r,&dati[205],11);
dec_r[10]='\0';


tutte queste variabili potrebbero contenere uno spazio all'inizio, alcune sono cifre intere altre invece hanno la virgola.

Ho provato tutte le soluzioni proposte dal manuale che posseggo ma niente da fare: errori in compilazione.

Non so più dove sbattere la testa.
Vi prego aiutatemi.

tomminno
28-04-2010, 17:04
Un possibile convertitore è:

std::stringstream iss(stringValue);
int output;
iss >> std::dec >> output;


Per quanto riguarda gli spazi iniziali ti conviene eliminarli prima della conversione.
E visto che parli di C++ usa string invece degli array di char!

cionci
28-04-2010, 17:48
Per quanto riguarda gli spazi iniziali ti conviene eliminarli prima della conversione.
No...perché ? Dovrebbe saltarli...

fero86
28-04-2010, 18:10
No...perché ? Dovrebbe saltarli... infatti di default vengono saltati automaticamente da ogni versione dell'operatore >> tranne quella che legge un char.

inoltre credo ci sia un typo nel codice di tomminno: dovrebbe essere "istringstream" anziché "stringstream".

infine std::dec non é necessario perché di default é giá impostata la base 10. questa é la mia versione del convertitore (si dá per scontato l'uso globale del namespace std):

string str = ...;
istringstream iss(str);
int n;
iss >> n;

cionci
28-04-2010, 18:47
Va bene anche stringstream senza la i. E' come ifstream o fstream ;)

Rizzolo
28-04-2010, 18:53
Vi ringrazio per le risposte: stavo provando con


int mese;
mese = atoi(str_mese);
int gmt;
gmt = atoi(str_gmt);
double dec_acc;
dec_acc = atof(str_dec_acc);


e ho dovuto rinominare tutto, pensate sia una buona soluzione?