2017-02-02 8 views
2

Ich habe eine Hausaufgabe, die erfordert, dass ich eine rekursive Funktion verwende, um die Anzahl von einem in einem Benutzer angegebenen String zu zählen. Ich möchte die Antwort nicht geben, aber wenn mir jemand eine kleine Anleitung geben könnte wäre das toll. Es nennt sich korrekt selbst, aber ich kann nicht herausfinden, wie man die Anzahl von a richtig zählt. Hier ist mein Code.Ich kann meine rekursive Funktion nicht erhalten, um Buchstaben in einem String richtig zu zählen (C++)

int charCounter(string str, int counter) 
{ 
    if (str == "") 
    { 
     return counter; 
    } 
    else if (str.substr(1) == "a"); 
    { 
     counter++; 
     return counter + charCounter(str.substr(1),counter); 
    } 
} 
+2

Hinweis: Eine 'string' besteht aus' char's. – CinCout

+0

Verwenden Sie für eine kleine Zeichenfolge einen Debugger, und durchlaufen Sie den Code Zeile für Zeile und geben Sie die rekursiven Aufrufe ein. Die * zwei * Probleme (zumindest), die du hast, sollten dann schnell offensichtlich werden. –

+0

Ich schlage vor, dass Sie einen Debugger verwenden oder cout-Anweisungen hinzufügen, um zu sehen, was Ihre Funktionen tun. Überprüfen Sie auch, was der Parameter für 'substr()' bedeutet. –

Antwort

0

Zunächst müssen Sie wissen, dass ein String ist ein Array von Zeichen. Z.B. "hey" => ['h', 'e', ​​'du'].

Wenn Sie mit rekursiven Funktionen arbeiten, ist das erste, was Sie brauchen, Ihre Stoppbedingung, die Sie als str == "" angegeben haben, oder wenn str leer ist.

Bei jedem Aufruf der rekursiven Funktion möchten Sie prüfen, ob die Zeichenkette leer ist, dann den Zähler zurückgeben, sonst Zähler inkrementieren, eine Zeichenkette aus der Zeichenkette entfernen, dann rekursiv die Funktion entlang der neuen Zeichenkette str aktueller Zähler.

Stellen Sie sicher, wenn Sie Sie Zähler rekursive Funktion Set aufrufen = 0

Pseudocode

recursiveStrCounter(str, counter) { 
    if empty str { 
     return counter 
    } 
    counter++ 
    remove one char from str 
    return recursiveStrCounter(str, counter) 
} 

print recursiveStrCounter(str, 0) 

Hoffe, es half.

+0

Genau das, was ich gesucht habe. Sehr hilfreiche Informationen für einen Anfänger und lernte ein paar neue Dinge. Vielen Dank! –

+0

Gern geschehen. Gut zu wissen, dass ich helfen konnte –

0

verändert sich die Funktion leicht

helfen
int countstring(string s) { 
     int counter = 0; 
     if (s.length() == 0) 
      return counter; 
     else { 
      if (s[0]== 'a') 
       counter++; 
      string newstring = s.substr(1); 
      return counter + countstring(newstring); 

     } 
    } 
Verwandte Themen