Funzione C ++ ricorsiva per spostare caratteri specifici alla fine della stringa

Sto tentando di scrivere una funzione ricorsiva che, data una stringa, calcola ricorsivamente una nuova stringa in cui tutti i caratteri ‘x’ minuscoli sono stati spostati alla fine della stringa.

Per esempio,
moveXs (“xxre”) -> “rexx”
moveXs (“xxhixx”) -> “hixxxx”
moveXs (“xhixhix”) -> “hihixxx”

Sono relativamente nuovo al C ++ e soprattutto alla ricorsione (purtroppo la funzione deve utilizzare questo metodo per risolvere il problema), quindi ho problemi con questo problema. Di seguito è riportato il codice che ho scritto finora, ma sembra che stia tornando solo stringhe vuote e non riesco a capire perché.

string moveXs(const string& str) { string strCopy = str; if (strCopy.length() <= 1) { return str; } else if (strCopy[0] == 'x') { strCopy = strCopy.substr(1, strCopy.length() - 1) + str[0]; return moveXs(strCopy.substr(0, (strCopy.length() - 2))); } else { return strCopy.substr(0, 1) + moveXs(strCopy.substr(1, strCopy.length() - 1)); } } 

Qualsiasi aiuto o consiglio sarebbe molto apprezzato!

Sembra che tu abbia appena avuto problemi di indicizzazione. Ho modificato il tuo codice qui e ho preso nota dei nuovi resi. Inoltre mi sono sbarazzato della seconda corda estranea.

 string moveXs(const string& str) { if (str.length() <= 1) { return str; } else if (str[0] == 'x') { return moveXs(str.substr(1, (str.length() - 1))) + str[0]; } else { return str[0] + moveXs(str.substr(1, str.length())); } } 

Puoi vederlo in azione qui: http://ideone.com/aT75l5

Un semplice approccio potrebbe essere semplicemente attraversare la stringa dall’inizio alla fine del conteggio e rimuovere ‘x’. Quindi aggiungere ‘x’ contare il numero di volte nella stringa precedente.