CString auslesen
-
Aehm, du hast wohl versehentlich den += Operator benutzt,
mach aus
millis += str[g] + millis;
das hier:
millis = str[g] + millis;
Was du gemacht hast, ist jedesmal eine Kopie des aktuellen Strings neu einzufuegen, daher ergibt sich auch die seltsame Zahl:
0
000
0002000usw.
Ansonsten musst du nur
npos
mit einer CString-Loesung (!= -1 wie in deinem urspruenglichem Post?) ersetzen.
-
Sone schrieb:
Vielleicht hättest du genug Kopf um zu kapieren...
An wen ist denn dieser Satz gerichtet?
Sone schrieb:
Deinen CString zu std::string zu konvertieren geht nicht?
Klar geht das. Die Frage ist aber 1. wie einfach geht das? und 2. macht das Sinn? Nein. Es macht keinen Sinn.
Ethon schrieb:
Das habe ich höflich ignoriert, da CString meinem C++ Compiler unbekannt ist.
Tu das. Ist ok.
Ethon schrieb:
Für diverse Frameworks gibt es ja Subforen.
Ja. Dann ist der Threadsteller wohl im falschen Forum. Über den Tellerrand gucken geht wohl nicht. Oder einen Hinweis geben, welches Forum ev. besser geeignet ist?
Ethon schrieb:
Würde mich aber stark wundern, wenn man aus einem CString keinen std::string machen könnte.
Es geht - sogar wieder zurück. Und, würdest Du das machen? Ich nicht, warum auch.
-
{ CString str("+ 1200ms 0"); size_t g = str.Find(_T("ms")); if (g != -1) { CString millis; while (--g >= 0 && str[g] >= '0' && str[g] <= '9') { millis = str[g] + millis; } m_textbox1.SetWindowTextW(millis); }
funktioniert, vielen herzlichen Dank!
wenn ich noch Kommazahlen zu berücksichtigen hätte, wäre doch meine Schleife:
while (--g >= 0 && str[g] >= '0' && str[g] <= '9' && str[g] = '.')
Richtig?
-
Stutzpeter schrieb:
wenn ich noch Kommazahlen zu berücksichtigen hätte, wäre doch meine Schleife:
while (--g >= 0 && str[g] >= '0' && str[g] <= '9' && str[g] = '.')
Richtig?
Nein, denn dann heisst es:
Solange g groesser als 0 ist und das Zeichen zwischen 0 und 9 ist UND ein Punkt ist ....
Das Zeichen kann aber nicht eine Ziffer und gleichzeitig ein Punkt sein, richtig ist:
Solange g groesser als 0 ist und das Zeichen zwischen 0 und 9 ist ODER g groesser als 0 ist UND ein Punkt hat ...
Ausserdem: Benutze noch einen
bool
- Flag, um zu pruefen, ob es das Komma in der Zahl schon gegeben hatNoch ein kleiner Fehler: Du hast den Zuweisungsoperator (=) anstelle des Gleichheitoperators (==) verwendet.
So muesste es eigentlich gehen:
CString str("+ 1200ms 0"); int g = str.find("ms"); if (g != -1) { bool komma = false; CString millis; while (--g >= 0 && ((str[g] >= '0' && str[g] <= '9') || str[g] == '.')) { if ((str[g] == '.' && !komma) || str[g] != '.') millis = str[g] + millis; else komma = true; } if (millis[0] == '.') millis = '0' + millis; m_textbox1.SetWindowTextW(str); }
-
theta schrieb:
Sone schrieb:
Vielleicht hättest du genug Kopf um zu kapieren...
An wen ist denn dieser Satz gerichtet?
Würde mich wundern, wenn du nicht siehst, an wen ich mich im folgenden Satz beziehe.
-
Aehm, das von oben ist Murks, sorry, hatte mich beeilt. So sollte es jetzt aber richtig sein:
CString str("+ 1200ms 0"); int g = str.find("ms"); if (g != -1) { bool komma = false; // komma schon gesetzt? CString millis; while (--g >= 0 && ((str[g] >= '0' && str[g] <= '9') || str[g] == '.')) { // wenn das Zeichen ein punkt ist, ... if (str[g] == '.') { // wenn der Punkt noch nicht gesetzt wurde, setze unser Flag if (!komma) { komma = true; } // ansonsten brechen wir die Schleife ab (Ende der Zahl) else { break; } } millis = str[g] + millis; } // wenn eine zahl vorhanden ist (!= "") und mit einem Punkt beginnt, // dann fuegen wir noch eine 0 davor if (millis != "" && millis[0] == '.') millis = '0' + millis; m_textbox1.SetWindowTextW(str); }
-
Ich kann nur Danke sagen! Wahnsinn! Danke für die Hilfe
-
@theta
ACK
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ethon schrieb:
Das habe ich höflich ignoriert, da CString meinem C++ Compiler unbekannt ist. Für diverse Frameworks gibt es ja Subforen.
Würde mich aber stark wundern, wenn man aus einem CString keinen std::string machen könnte.Wozu antwortest Du in einem MFC-Forum, wenn CString Deinem Compiler (und auch Dir) unbekannt ist?