String auf alphanumerisch prüfen
-
Aufgabe:
Schreiben Sie eine Funktion istAlphanumerisch(const string& text), die true zu-
rückgibt, wenn text nur Buchstaben und Ziffern enthält, andernfalls false.Musterlösung:
#include <iostream> #include <string> bool istAlphanumerisch(const std::string& text); int main() { std::string einText; std::cout << "Zeichenfolge eingeben:"; std::getline(std::cin, einText); if (istAlphanumerisch(einText)) { std::cout << "Die eingegebene Zeichenkette enthält " "nur Buchstaben und Ziffern.\n"; } else { std::cout << "Die eingegebene Zeichenkette enthält NICHT " "nur Buchstaben und Ziffern.\n"; } } bool istAlphanumerisch(const std::string& text) { bool ergebnis{true}; for (char zeichen : text) { bool istZiffer = zeichen >= '0' && zeichen <= '9'; bool istBuchstabe = (zeichen >= 'A' && zeichen <= 'Z') || (zeichen >= 'a' && zeichen <= 'z'); // && bindet stärker, die Klammern sind nur zur besseren // Lesbarkeit if (!istZiffer && !istBuchstabe) { ergebnis = false; break; // weitere Prüfungen sind nicht notwendig } } return ergebnis; }
Hier verstehe ich zwei Dinge nicht:
- Was bringt es hier den String const und als Referenz übergeben?
- In der For Schleife steht char zeichen : text wodurch der String durchlaufen wird. Ich verstehe nicht warum.
-
- Den String als Referenz zu übergeben spart eine Kopie. Damit der Ursprungsstring nicht verändert werden kann, const.
- https://en.cppreference.com/w/cpp/language/range-for
-
@theAnfänger77 sagte in String auf alphanumerisch prüfen:
Schreiben Sie eine Funktion istAlphanumerisch(const string& text), die true zu-
rückgibt, wenn text nur Buchstaben und Ziffern enthält, andernfalls false.'find_if()' in verbindung mit 'isalnum()' gäbe einen schönen einzeiler. aber das ist wohl schummeln.
-
@Bushmaster sagte in String auf alphanumerisch prüfen:
@theAnfänger77 sagte in String auf alphanumerisch prüfen:
Schreiben Sie eine Funktion istAlphanumerisch(const string& text), die true zu-
rückgibt, wenn text nur Buchstaben und Ziffern enthält, andernfalls false.'find_if()' in verbindung mit 'isalnum()' gäbe einen schönen einzeiler. aber das ist wohl schummeln.
Wenn schon Algorithmus dann any_of.
-
@manni66 sagte in String auf alphanumerisch prüfen:
@Bushmaster sagte in String auf alphanumerisch prüfen:
@theAnfänger77 sagte in String auf alphanumerisch prüfen:
Schreiben Sie eine Funktion istAlphanumerisch(const string& text), die true zu-
rückgibt, wenn text nur Buchstaben und Ziffern enthält, andernfalls false.'find_if()' in verbindung mit 'isalnum()' gäbe einen schönen einzeiler. aber das ist wohl schummeln.
Wenn schon Algorithmus dann any_of.
#include <iostream> #include <algorithm> #include <cctype> using namespace std; bool istAlphanumerisch(const string& text) { return find_if_not(text.begin(), text.end(), isalnum) == text.end(); // oder: return all_of(text.begin(), text.end(), isalnum); } int main() { cout << istAlphanumerisch("hel1lo2AC") << endl; // 1 cout << istAlphanumerisch("he-llo") << endl; // 0 }
-
Danke für die Antworten!