string to double C++

Sekcia o programovaní, programovacích jazykoch...
Používateľov profilový obrázok
materik
Používateľ
Používateľ
Príspevky: 2327
Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov

string to double C++

Príspevok od používateľa materik »

celkom tu blbnem s takou hovadinou... :facepalm:
nacitavam data z csv (ako string) a potrebujem ich dostat do vector-a alebo do pola (ako double).
Viete o nejakom dobrom sposobe?

Idealne hned pri nacitani a triedeni aby sa to overilo a skonvertovalo na double.

touto funkciou si nahadzujem data do vektora
Spoiler: ukázať
vector <string> readCSV(fstream &file)
{
string csvLine;
vector<string> csvColumn;
vector<string> csvString;

while(getline(file, csvLine) )
{
istringstream csvStream(csvLine);
string csvElement;
while(getline(csvStream, csvElement, ';') )
{
csvColumn.push_back(csvElement);
}
}
return csvColumn;
}
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: string to double C++

Príspevok od používateľa pEpinko »

Bud atof, alebo tomu nerozumiem.
Používateľov profilový obrázok
materik
Používateľ
Používateľ
Príspevky: 2327
Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov

Re: string to double C++

Príspevok od používateľa materik »

s tym som to primarne planoval spravit, ale on akosi nezvlada C++ triedu string
zastavi ma to s hlaskou: cannot convert parameter 1 from 'std::string' to 'const char *'

po dlhom googleni som sa dostal k niecomu takemu
Spoiler: ukázať
for (long i=0; i<(long)temp.size(); ++i) {
if (temp=='.') {
// token contains a '.' character - either a string or a floating point
containsPeriod++;
} else if ( temp<48 || 57<temp ) {
// token contains non-numeric characters - string (sorry no hex)
containsAlpha++;
}
}


if (containsAlpha==0 && containsPeriod==0) {
longArray.push_back(atoi(temp.c_str()));
order.push_back(0);

} else if (containsPeriod==1 && containsAlpha==0) {
doubleArray.push_back(atof(temp.c_str()));
order.push_back(1);
} else {
stringArray.push_back(temp);
order.push_back(2);
}

teda pekne jeden string po druhom ich prebehnut a hladat znaky. U mna bodku a cisla...
tu je link na celu funkciu http://www.dreamincode.net/code/snippet1316.htm

ALE, primarne mi ide o to, ci existuje aj JEDNODUCHSI SPOSOB?
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: string to double C++

Príspevok od používateľa pEpinko »

Mozno takto: http://codepad.org/6F1XSrNH

Ale rozhodne je to velmi neC++ sposob.
Používateľov profilový obrázok
materik
Používateľ
Používateľ
Príspevky: 2327
Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov

Re: string to double C++

Príspevok od používateľa materik »

tak som bol nuteny to spravit cez funkciu, takto to teraz vyzera

double stringConvert(string csvElement)
Spoiler: ukázať
double stringConvert(string csvElement){

double returnDouble = 0;
string temp;
unsigned long start=0;
unsigned long end=0;

while (end<=csvElement.size()) {
end++;
if (end<csvElement.size() && csvElement[end]!=',') {
continue;
}
temp.assign(csvElement,start,end-start);

int containsPeriod=0;
int containsAlpha=0;

for (long i=0; i<(long)temp.size(); ++i) {
if (temp=='.') {
containsPeriod++;
}
else if ( temp<48 || 57<temp ) {
containsAlpha++;
}
}

if (containsPeriod==1 && containsAlpha==0) {
returnDouble = atof(temp.c_str());
}
else {continue;}
end++;
start=end;
}
return returnDouble;
}

vector <double> readCSV(fstream &file)
Spoiler: ukázať
vector <double> readCSV(fstream &file){

string csvLine;
//vector<string> csvColumn;
vector<double> csvDouble;

while(getline(file, csvLine) )
{
istringstream csvStream(csvLine);
string csvElement;
double csvGetDouble;
while(getline(csvStream, csvElement, ';') )
{
csvGetDouble = stringConvert(csvElement);
//csvColumn.push_back(csvElement);
csvDouble.push_back(csvGetDouble);
}
}
//return csvColumn;
return csvDouble;
}

Myslim, ze to ide, ak by ste niekto videli nejaky zadrhel, tak mi pls dajte vediet ;)
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77

Návrat na "Programovanie"