DOMANDA (C++) Lunghezza stringa + posizione carattere in stringa

Pubblicità

MPG

Utente Attivo
Messaggi
556
Reazioni
4
Punteggio
55
SIamo alla fine dell'anno devo fare 10 esercizi, 8 fatti questi due sono in tilt (sempre con ricorsione)
1) data una stringa definisci lunghezza con ricorsione
2) data una stringa e un carattere restituisce la prima posizione del carattere.

Per il primo trovo cosi la lunghezza ma non è con ricorsione...
Per il secondo'???


C++:
#include <iostream>
using namespace std;
int main() {
   char string[] = "Prova";
   int conta = 0;
   while (string[conta] != 0)
      conta++;
   cout<<"La stringa e' "<<string<<endl;
   cout <<"La lunghezza della stringa e' "<<conta<<endl;
   return 0;
}
 
Ultima modifica:
La stringa vuota "" è lunga zero
altrimenti la lunghezza di una stringa è 1+(la lunghezza della sottostristringa che segue il primo carattere)
L'altro è simile (devi eventualmente ragionare sul fatto che il carattere di cui cerchi la posizione non sia nella stringa, a meno che non si possa dare per scontato che il carattere cercato ci sia)
 
Ultima modifica:
Fatto mi da' "expected primary-expression before 'char' qui:

cout << lunghezza(char string);


C++:
using namespace std;


int lunghezza(char string)
{

    if (string == 0)
        return 0;
    else
        return 1 + lunghezza(string + 1);
}


int main()
{
    char string[] = "Prova";
    cout << lunghezza(char string);
    return 0;
}
 
La stringa vuota è "" (non 0) cioè non ha nessun carattere racchiuso dentro le virgolette, tu hai fatto un controllo sulla stringa nulla (puntatore nullo)
 
La stringa vuota è "" (non 0) cioè non ha nessun carattere racchiuso dentro le virgolette, tu hai fatto un controllo sulla stringa nulla (puntatore nullo)

Scusa intendevi così come qui sotto?
, perchè ancora nulla con errore ulteriore in
if (string == "")
(mi dice "iso c++ forbids comparison between pointer and integer -fpermissive" )

C++:
using namespace std;


int lunghezza(char string)
{

if (string == "")
return 0;
else
return 1 + lunghezza(string + 1);
}


int main()
{
char string[] = "Prova";
cout << lunghezza(char string);
return 0;
}
 
Ultima modifica:
Stai sbagliando la chiamata alla funzione... perchè specifichi il tipo di dato?
Anche l'argomento della funzione non è corretto.
 
Stai chiamando la funzione in questo modo:

C++:
cout << lunghezza(char string);

perchè indichi "char"?

C++:
int lunghezza(char string) {

la funzione ha come argomento (riceve un parametro) di tipo char, in base a come l'hai definita; il valore che passi però non è un char ma un array di char.
 
Cosi' viene utilizzando char, pensavi altro modo in caso?

C++:
#include <iostream>
using namespace std;

int lunghezza( const char string[] )
{
    if ( string[0] == 0 )
        return 0;

    else
        return 1 + lunghezza(string + 1);
}

int main()
{
    const char string[] = "prova" ;
    cout << lunghezza(string) << '\n' ;
}
--- i due messaggi sono stati uniti ---
Stai chiamando la funzione in questo modo:

C++:
cout << lunghezza(char string);

perchè indichi "char"?

C++:
int lunghezza(char string) {

la funzione ha come argomento (riceve un parametro) di tipo char, in base a come l'hai definita; il valore che passi però non è un char ma un array di char.

Ciao mi dici qualcosa sul mio ultimo code?
Pe ril discorso di Bat di mettere la stringa vuota è "" (e non 0) , se pero' io metto
string[0] == ""
non viene accettato.....
 
Ultima modifica:
Ti consiglierei ciò che dice Bat: o verificando la lunghezza oppure confrontando con il carattere \0 (stringa vuota, c'è il solo terminatore). Quindi:
C++:
    if ( string[0] == '\0' )

che è poi il primo carattere che vedi nella tabella ASCII (è come fare string[0] == (char) 0).

Non ho capito perchè utilizzi (o utilizzate) C++, ma al posto delle stringhe, utilizzi un array di caratteri. E' una richiesta del docente?
 
No mi è venuto cosi' non riesco a farlo non utilizzando l'array di caratteri, mi puoi aiutare?
Pensavo di fare qualcosa di simile come l'esercizio delle occorrenze che ho fatto per cercare la lunghezza ma non riesco bene ad impostarlo per questo esercizio. Pensavo di usare il contatore per il numero di caratteri inseriti non mi viene il modo...
QUesto è il code per le occorrenze:

C++:
#include <iostream>
//#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;


string occorrenze (string a, char b)
{

    int dim=a.length();
    int conta=0;

    for (int i=0; i<dim; i++)
{
    if(a[i]==b)
{
    conta++;
}
}
  cout<< conta;


}
int main ()
{

    string a;
    cin>> a;
    char b;
    cin>> b;
    cout << occorrenze(a, b);

    return 0;
}
--- i due messaggi sono stati uniti ---

Cosi' mi viene senza array il primo esercizio , non so se
if ( s == "")
return 0;
puo' andare bene pero'.
Inoltre non sono riuscito a fare il secondo esercizio senza l'appoggio di array...

C++:
#include <iostream>
#include<string>

using namespace std;
int lunghezza (string s)
{if ( s == "")
    return 0;
else
       return 1 + lunghezza (s.substr(1));
}
    int main()
{
    string s;
    cin>> s;
    cout<< lunghezza(s);
    return 0;
}
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top