Voka­le zäh­len

Lese­zeit: 6 Minu­ten
Navi­ga­ti­on

In die­sem Pro­gramm soll die Ein­ga­be im Seri­el­len Moni­tor dazu ver­wen­det wer­den, in einem Satz die Anzahl der Voka­le zu zäh­len und anzu­zei­gen. Außer­dem erfährst du eini­ges über Zei­chen­ket­ten.

Zei­chen­ket­ten (Strings) kön­nen aus einem ein­zel­nen Zei­chen (char) oder meh­re­ren Zei­chen bestehen.

Sie wer­den mit den Schlüs­sel­wör­tern String und char defi­niert.

String Zei­chen­ket­te = "abcd“;
char Buch­sta­be = "a“;

String und char kön­nen auch in einem Array abge­legt wer­den:

// defi­niert ein char-Array mit 5 Ele­men­ten
char Buchstaben[5];


// defi­niert ein Array mit den Ele­men­ten aei­ou
char Buch­sta­ben[] = {"aei­ou"};

// defi­niert ein String-Array
String Satz­tei­le[] = {"Pro­gram­mie­ren ", "ist ", "toll!"};

Eine for-Schleife und ➨size­of ermög­li­chen den Zugriff auf die Ele­men­te des Arrays.

// definiert ein char Array mit den Elementen aeiou
char Buchstaben[] = {"aeiou"};
 
// definiert ein String-Array
String Satzteile[] = {"Programmieren ", "ist ", "toll!"};

void setup() 
{  
  Serial.begin(9600); 

  // Array mit den Buchstaben anzeigen    
  // char belegt 1 Byte -> entspricht dem Endwert 
  for(int i = 0; i < sizeof(Buchstaben); i++)  
  {  
    Serial.print(Buchstaben[i]);  
  }  
 
  Serial.println();
  
  // Array mit den Satzteilen anzeigen  
  // Endwert der for-Schleife mit sizeof bestimmen
  for(int i = 0; i < sizeof(Satzteile) / sizeof(Satzteile[0]); i++)     
  {  
    Serial.print(Satzteile[i]);  
  }
}

void loop()
{
  // bleibt leer, das Programm läuft nur einmal
}

Für die­se Auf­ga­be musst du den Ardui­no nur über USB ver­bin­den und den Seri­el­len Moni­tor öff­nen. So soll es aus­se­hen:

Ver­wen­de das Ein­ga­be­feld im Seri­el­len Moni­tor:

Defi­nie­re den String Ein­ga­be als glo­ba­le Varia­ble:

String Eingabe;

Im setup-Block muss du den Seri­el­len Moni­tor star­ten und einen Hin­weis für die Ein­ga­be geben:

void setup() 
{  
  Serial.begin(9600);  
  Serial.println("Bitte Text eingeben:"); 
}

Im loop-Teil musst du zunächst die Zäh­ler für die Voka­le defi­nie­ren und auf 0 set­zen ...

void loop() 
{  
  // alle Zähler auf 0 setzen  
  int ZaehlerA = 0;  
  int ZaehlerE = 0; 
  int ZaehlerO = 0;
  int ZaehlerU = 0; 
  int ZaehlerI = 0;

… dann auf die Ein­ga­be war­ten:

  while (Serial.available() > 0)  
  { 
    // solange lesen, bis return \n eingegeben wurde          
    String Eingabe = Serial.readStringUntil("\n");  

    // das letzte Zeichen ist return  
    // -> soll entfernt werden    
    Eingabe = Eingabe.substring(0, Eingabe.length() - 1);

Damit Groß- und Klein­buch­sta­ben erfasst wer­den, wird der Text in Klein­buch­sta­ben umge­wan­delt und dann auf die Anzahl der Voka­le unter­sucht:

    Eingabe.toLowerCase();
    for (int i = 0; i < Eingabe.length(); i ++)  
    {  
      // Vokale zählen  
      if (Eingabe[i] == 'a') ZaehlerA ++;  
      if (Eingabe[i] == 'e') ZaehlerE ++;  
      if (Eingabe[i] == 'o') ZaehlerO ++; 
      . . . 
      . . .   
    }   

    // Ergebnis anzeigen  
    // \u00e4lt → ä  
    Serial.println("Der Text enth\u00e4lt " + String(ZaehlerA) + " mal das a"); 
    Serial.println("Der Text enth\u00e4lt " + String(ZaehlerE) + " mal das e");
    . . .  
    . . .   

    // Anzahl der Zeichen anzeigen  
    Serial.println(String(Eingabe.length()) + " Zeichen!") 
  }
} 

Zusätz­lich kannst du auch alle Voka­le durch einen ande­ren Buch­sta­ben erset­zen. Ergän­ze das Pro­gramm nach der Aus­ga­be der gezähl­ten Voka­le. Im Bei­spiel wer­den mit replace alle Voka­le durch „i“ ersetzt.
Vor­her musst du den ursprüng­li­chen Text sichern:

    // Original-Text sichern   
    String OriginalEingabe = Eingabe;  

    // alle a durch i ersetzen     
    OriginalEingabe.replace("a", "i");     
    OriginalEingabe.replace("e", "i");   
    . . .     
    . . .     
    . . .     
    Serial.println(OriginalEingabe); 

Anschlie­ßend kannst du den Satz auch rück­wärts anzei­gen las­sen. Lei­der funk­tio­niert das nicht mit allen Umlau­ten (nicht mit ß).
Aller­dings musst du vor­her den String in ein char-Array umwan­deln:

    /*
      Eingabe rückwärts ausgeben
      Array Satz erstellen
      Anzahl der Elemente entspricht der Anzahl der Buchstaben
    */
    char Satz[Eingabe.length()];

    // char-Array Satz erstellen
     Eingabe.toCharArray(Satz, Eingabe.length() + 1);

    // Array rückwärts anzeigen 
    for (int i = sizeof(Satz); i >= 0; i--) 
    {    
      Serial.print(Satz[i]); 
    }   


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 21. Mrz 2020 @ 13:35