Wiem, że jest funkcja w standardzie, stod(czy jakoś tak), ale u mnie w wstring jest przecinek zamiast kropki i tamta funkcja sobie nie radzi.
W każdym razie, to akurat mało ważne., Dlaczego ta funkcja nie działa? Funkcję przepisywałem zmieniając nazwy zmiennych i trochę ją poprawiając, więc duże prawdopodobieństwo, że coś skopałem przepisując. Ale nie mogę się doszukać.
Dostaję błąd: Debug Assertion Failed! Expression: string subscript out of rang
double A::B::WstringToDouble(const wstring & wString)
{
size_t wStringSize = wString.size();
for (size_t i = 0;i < wStringSize;++i)
if ((wString[i] >= 48 && wString[i] <= 57) || wString[i] == 44 || wString[i] == 45)
continue;
else
return DBL_MAX;
double wDouble = 0;
bool wNegative = false;
int wCommaIndex = 0;
for (size_t i = 0;i < wStringSize;++i)
{
if (wString[i] == 44)
wCommaIndex = i;
}
//przed przecinkiem
for (size_t i = wCommaIndex;i >= 0;--i)////////////<-TUTAJ Po 3cim przejściu pętli zmienna *i* dostaje kosmiczną wartość.
{
if (wString[i] == 45)
wNegative = true;
if (wString[i] <= 57 && wString[i] >= 48)
{
wDouble = wDouble + ((int(wString[i]) - 48) * (pow(10, (wCommaIndex - i - 1))));
}
}
//po przecinku
for (size_t i = wCommaIndex; i <= wStringSize; ++i)
{
if (wString[i] <= 57 && wString[i] >= 48)
{
wDouble = wDouble + ((int(wString[i]) - 48) * (pow(10, (wCommaIndex - i))));
}
}
if (wNegative)
wDouble = -wDouble;
return wDouble;
}