GrEnE Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 Hallo, ich habe einen std::string und mit Hilfe einer for-Schelife gehe ich durch jedes einzelne Zeiche. for(std::string::size_type idx=0; idx<str.size(); ++idx) {} Nun möchte ich prüfen, ob das Zeichen (str[idx]) im Bereich von ASCII liegt oder in einem bestimmten Bereich innerhalb von ASCII liegt (z.B. 65 bis 122) In Moment habe ich ein Blackout, wie ich dies mache ... könnt ihr mir helfen? Ich weiß nicht, ob ich den char einfach in einen int casten kann und prüfen, ob er im Bereich ist. Also so: bool isInASCII(char ch) { if(static_cast<int>(ch) > 65 && static_cast<int>(ch) < 122) return true else return false; } THX for Help GrEnE Zitieren
Kitty82 Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 Hi, eigentlich müsste es so funktionieren. Ich kenn nur nicht diese Schreibweise mit static_cast usw. Es reicht auch wenn du es so schreibst: if( (int)ch > 65 && (int)ch < 122) return true else return false; so müsst es auf jeden Fall funktionieren... deine Version müsstest du halt mal ausprobieren. Gruß Kitty Zitieren
Guybrush Threepwood Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 Du musst da gar nichts casten:) Zitieren
Kitty82 Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 ach, müsste man nur casten, wenn man den ASCII-code ausgeben will? um ehrlich zu sein, hab's bis jetzt immer gecastet... bin halt auf Nummer sicher gegangen Zitieren
GrEnE Geschrieben 18. Oktober 2004 Autor Geschrieben 18. Oktober 2004 THX Guybrush Threepwood - aber ein 'cast' wäre nicht schlimm, oder? - Kann ja sein, dass es auf irgendeinder Platform (Mac, Unix, Win) nicht geht, dass direkte vergleichen. Also war ja mein Ansatz doch nicht verkehrt ... @Kitty82: Auch Danke, aber C-Casts benutze ich generell nicht und die Syntax bei mir mit static_cast war dann die Richtige. Zitieren
Guybrush Threepwood Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 Also soweit ich weiß hat das nichts mit der Plattform zu tun. Zitieren
GrEnE Geschrieben 18. Oktober 2004 Autor Geschrieben 18. Oktober 2004 Also soweit ich weiß hat das nichts mit der Plattform zu tun. Nee ist klar - meinte auch vielmehr Compiler (auf unterschiedlichen Platformen). Beispiel: VC71 und CW9 (CodeWarrior9) verhalten sich schon sehr unterschiedlich. Mit einen cast wäre ich wahrscheinlich auf der sicheren Seite, oder? Zitieren
Klotzkopp Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 Der cast nach int bewirkt hier nichts, daher kannst du ihn auch weglassen. bool isInASCII(char ch) { return ch > 65 && ch < 122; }[/CODE] Aber bist du sicher, dass du nicht >= 65 meinst? Zitieren
GrEnE Geschrieben 18. Oktober 2004 Autor Geschrieben 18. Oktober 2004 Der cast nach int bewirkt hier nichts, daher kannst du ihn auch weglassen. bool isInASCII(char ch) { return ch > 65 && ch < 122; } Okay. Aber bist du sicher, dass du nicht >= 65 meinst? Hmm, jetzt wo du es sagst. - Dann aber auch <= 122! bool isInASCII(const char ch) { return ch >= 65 && ch <= 122; } So, dass dürfte die Endfassung sein ... Bedanke mich noch mal bei allen, die hier geantwortet haben!! THX Zitieren
Guybrush Threepwood Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 Nun möchte ich prüfen, ob das Zeichen im Bereich von ASCII liegt... Wenn du mal nur das prüfen willst kannst du unter Windows _isascii nehmen. Komischer ist iswascii im standard enthalten _isascii aber nicht Zitieren
GrEnE Geschrieben 19. Oktober 2004 Autor Geschrieben 19. Oktober 2004 Wenn du mal nur das prüfen willst kannst du unter Windows _isascii nehmen. Komischer ist iswascii im standard enthalten _isascii aber nicht THX, aber das Problem, dass ich nicht nur unter Windows laufe und somit plattformunabhängig bleiben muss. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.