Hmm signedness, daar had ik niet aan gedacht. Best stom. Dat ie niet kan werken voor negatieve waarden is logisch - EOF is gelijk aan -1, maar niet aan de char 0xff.
Nou gebruik ik sowieso nooit die is* functies. We hebben ze hier op 't werk ook vakkundig weggesloopt bij het parsen van xml data omdat ze ranzig traag zijn (in de VC++ CRT iig, geen idee hoe dat met andere implementaties zit) omdat ze elke keer zo'n locale ophalen e.d.. En dat terwijl onze invoer toch altijd gewoon in de ASCII range valt, dus een whitespace is 9..13 of 32, een digit is '0'..'9', en een letter is 'A'..'Z' of 'a'..'z'.
Hoe je het voorkomt?
C++:
1
2
3
4
5
6
7
8
9
| #include <cctype>
namespace std
{
bool isspace(char c)
{
return isspace(c & 0xff);
}
} |
.edit: blaat. Onzin natuurlijk. Als je een char erin stopt ben je gewoon dom bezig. Uiteraard verwacht isdigit() een verbreedde char - wat je verkrijgt door ctype<char>::widen() aan te roepen op een locale. Hij verwacht geen chars, dus waarom er eentje geven? Da's vragen om problemen

. Voor C ben je gewoon screwed, maar C is dan ook een kuttaal
[
Voor 28% gewijzigd door
.oisyn op 09-11-2007 18:00
]