000
08.09.2011, 21:51 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
Hi,
hab hier ein interessantes Problem bzw Fehlverhalten:
C++: |
int cursor_pos = 0; std::string test1;
test1 = "abcdefg hijklmn";
// Erst über alle Trennzeichen hinweg while (cursor_pos < text.length() && std::string(" \t\n-+=").find(text[cursor_pos+1]) != std::string::npos) { if(cursor_pos == text.length()) break; ++cursor_pos; }
// Und dann über alles, was kein Trenner ist while (cursor_pos < text.length() && std::string(" \t\n-+=").find(text[cursor_pos+1]) == std::string::npos) { if(cursor_pos == text.length()) break; ++cursor_pos; }
|
Die cursor_pos "springt" korrekt von vor "a" auf das leerzeichen nach "g". Führe ich die 2 SChleifen nun nochmals aus, steht der Cursor korrekt nach "n".
Probier ich das ganze jedoch mit wstring:
C++: |
int cursor_pos = 0; std::wstring test1;
test1 = L"abcdefg hijklmn";
// Erst über alle Trennzeichen hinweg while (cursor_pos < text.length() && std::wstring(L" \t\n-+=").find(text[cursor_pos+1]) != std::wstring::npos) { if(cursor_pos == text.length()) break; ++cursor_pos; }
// Und dann über alles, was kein Trenner ist while (cursor_pos < text.length() && std::wstring(L" \t\n-+=").find(text[cursor_pos+1]) == std::wstring::npos) { if(cursor_pos == text.length()) break; ++cursor_pos; }
|
springt der cursor seltsamerweise zwischen f und g (also eines zu wenig)???????
Wenn ich das ganze dann nochmals ausführe, crasht er bzw erzeugt eine ausnahme im "text[cursor_pos+1]" - obwohl das mit std::string noch funktionert hat?
Ist das nur ein Bug in der Visual Studio implementierung von wstring oder ist das oben völliger blödsinn - im Prinzip ist das ein EditCtrl - d.h wenn man "Strg+Rechts" drückt, soll er das aktuelle Wort überspringen vom Cursor her. (@0xdeadbeef ich denke ich kann fast wetten das du da eine sauberere lösung in petto hast ;-)) -- class God : public ChuckNorris { }; Dieser Post wurde am 08.09.2011 um 21:52 Uhr von FloSoft editiert. |