Problem mit Microsoft Visual C++

Hallo Heinzi1991

Das Problem ist relativ simpel:
Wenn du Zeichen ausserhalb des ASCII-Zeichensatzes hast (0-127) werden diese als negative Zahlen betrachtet (std::string::eek:perator[] gibt signed char zurück). Das Problem kannst du umgehen mit:
C++:
if(isspace(static_cast<unsigned char>(text[i]) && !isspace(static_cast<unsigned char>(text[i - 1]))

Viele Grüsse
Cromon
 
super vielen vielen dank an cromon! jetzt funktioniert es!

und kannst du mir das jetzt auch noch erklären, so gut bin ich leider nicht in c++
 
Beispielsweise der Buchstabe ö ist UTF-8 kodiert aus zwei Zeichen bestehend. Das erste ist 0xC3, das zweite 0xB6. Im Unicodezeichensatz ist ö das Zeichen 0xF6. Unabhängig welchen Zeichensatz davon du verwendest handelt es sich bei allen Werten als signed char interpretiert um negative Werte.

isspace prüft aber, ob der übergebene Wert ein unsigned char (0-255) ist. 0xF6 (-10) ist natürlich < 0 und daher stürzt es da ab. Mit dem static_cast<unsigned char> wird die entsprechende unsigned Variante im 2er Komplement verwendet, was 246 ist. Damit hat dann auch isspace kein Problem mehr.

Viele Grüsse
Cromon
 
Hallo Heinzi,

was vielleicht auch noch interessant für dich sein könnte:

http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c

damit musst du dann eigentlich nur noch einen Vektor durchsehen und nachsehen, ob das aktuelle Element gerade ein Wort ist, das du als Wort zählen möchtest (mit deiner Abfrage wäre nämlich auch
Code:
_!#!?_
(die _ sollen ein Blank andeuten) ein Wort)

Btw. Ich konnt auf dem Nami Bild überhaupt nichts erkennen *nach rechts starrt*
 

Neue Beiträge

Zurück