Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » string vs wstring

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.09.2011, 02:30 Uhr
0xdeadbeef
Gott
(Operator)


Äh...

C++:
cursor_pos = text.find_first_not_of(" \t\n-+=");
cursor_pos = text.find_first_of(" \t\n-+=", cursor_pos);


?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: