Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] Inverti stringa ricorsivamente

    devo invertire una stringa in modo ricorsivo
    nn so errore tira fuori, vi posto codice e errore

    codice:
    #include <iostream>
    #include <string>
    
    using namespace std;	
    
    string b;
    string a1;
    
    string invert(string a)
    {
    	b = b + a.substr(a.length() - 1, 1);
    	
    	if (a.length() == 1)
    		return b;
    	else
    		a1 = a.substr(0, a.length() - 2);
    	
    	invert(a1);
    }
    
    int main()
    {
    	string a;
    	cin >> a;
    	cout << invert(a) << endl;
    	return 0;
    }

    errore

    codice:
    bash-2.05b$ ./inv
    ciao
    terminate called after throwing an instance of 'std::out_of_range'
      what():  basic_string::substr
    Abortito
    live free or die

  2. #2
    Al di la' dell'errore che ti da, credo ci sia un errore logica, nel senso che ritorni solo quando arrivi al "caso base" di stringa si lunghezza unitaria.
    L'ultima riga dovrebbe essere: return invert(a1)
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    ho provato ma nn cambia nulla, nn capisco qual'è il mio errore, esco nel numero degli elementi di string?

    live free or die

  4. #4
    Non ho capito bene cosa sia b. O meglio, se ho capito bene, stai barando

    Considera che non conosco come opera la funzione substr()
    Cmq il problema potrebbe essere questo:

    quando la stringa e' lunga 2 esegui

    codice:
    a1 = a.substr(0, a.length() - 2);
    // Vale a dire a1 = a.substr(0, 0) = ""
    poi richiami ricorsivamente la routine che esegue:

    codice:
    b = b + a.substr(a.length() - 1, 1);
    // Vale a dire b = b + a.substr(- 1, 1);
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #5
    ok errore di uno!
    avevo fatto male i conti!

    live free or die

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.