string zerlegen nach double
-
Heiho
ich hole aus einer liste ein string, der sieht zb so aus
"12.13 - 14.4" //das moechte ich zerlegen zu double a = 12; double b = 13; double c = 14.4wie mach ich das am besten - geholt wird es als TCHAR
das hab ich bisher:
TCHAR str[13] = {'\0'}; TCHAR a[3] = {'\0'}; TCHAR b[3] = {'\0'}; TCHAR c[5] = {'\0'}; ListView_GetItemText(m_list, 1, 0, str, 100); a[0] = str[0]; a[1] = str[1]; b[0] = str[3]; b[1] = str[4]; c[0] = str[8]; c[1] = str[9]; c[2] = str[10]; c[3] = str[11];anders wuesste ichs bisher nicht
ich kann nu entweder versuchen das TCHAR nach double zu wandeln oder
std::wstring wstr(a);und dann das wstring nach double - so oder so bekomm ich des nicht hin ?!
also die frage
1. wie kann ich eleganter zerteilen ? die positionen sind immer fest, auch die maximale groesse
(immer "2.2 - 2.1")
2. wie kann ich TCHAR oder wstring nach double wandeln ?
danke schonmal
-
Na such halt nach dem "-" und pack die beiden enden jeweils in nen string. Dann schieb alles in nen stringstream und hol dir nen double raus

-
(D)Evil schrieb:
stringstream und hol dir nen double raus
und wie geht das ?
das hab ich bisher und es funktioniert:
TCHAR str[13] = {'\0'}; TCHAR a[3] = {'\0'}; double da = 0; TCHAR b[3] = {'\0'}; double db = 0; TCHAR ab[6] = {'\0'}; double dab = 0; TCHAR c[5] = {'\0'}; double dc = 0; SecureZeroMemory(str, 20); SecureZeroMemory(a, 3); SecureZeroMemory(b, 3); SecureZeroMemory(c, 5); SecureZeroMemory(ab, 6); for(int i=0; i<ListView_GetItemCount(m_List); ++i){ ListView_GetItemText(m_List, i, 0, str, 13); if(str[0] == _T('')) break; else{ ab[0] = a[0] = str[0]; ab[1] = a[1] = str[1]; ab[2] = str[2]; ab[3] = b[0] = str[3]; ab[4] = b[1] = str[4]; c[0] = str[8]; c[1] = str[9]; c[2] = str[10]; c[3] = str[11]; std::wstring wstr(a); da= _wtof(wstr.data()); wstr=b; db= _wtof(wstr.data()); wstr=ab; dab= _wtof(wstr.data()); wstr=c; dc= _wtof(wstr.data()); // da = WW // db = XX // dab = WW.XX // dc = YY.Z // weitere operationen mit den double zahlen } }
-
bool show_data(std::string sData) { if (pData == NULL) return false; std::string::size_type pos = sData.find(" - ", 0); if (pos == string::npos) return false; std::string::size_type pos2 = sData.find_first_of("."); if (pos2 == std::string::npos) return false; std::stringstream ss; double dData3 = 0.0; double dData1 = 0.0; double dData2 = 0.0; ss << sData.substr(pos); ss >> dData3; // 14.4 ss.clear(); ss << sData.substr(0, pos2); ss >> dData1; // 12 ss.clear(); ss << sData.substr(pos2, pos - pos2); ss >> dData2; // 13 return true; }So habs net getestet sondern einfach kurz nach www.cppreference.com zusammengesetzt ... wo ist das Problem?
-
.. ich finde Ihr denkt zu kompliziert

einfach auslesen:
TCHAR src[] = TEXT("12.13 - 14.4"); double a,b,c; { int aInt; TCHAR z; std::basic_istringstream< TCHAR > buf( src ); buf >> aInt >> z >> b >> z >> c; a = aInt; }Gruß
Werner