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:

    1. Was bringt es hier den String const und als Referenz übergeben?
    2. In der For Schleife steht char zeichen : text wodurch der String durchlaufen wird. Ich verstehe nicht warum.


    1. Den String als Referenz zu übergeben spart eine Kopie. Damit der Ursprungsstring nicht verändert werden kann, const.
    2. 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!


Log in to reply