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

MPG

Utente Attivo
544
4
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:

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
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:
  • Mi piace
Reazioni: MPG

MPG

Utente Attivo
544
4
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;
}
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
La stringa vuota è "" (non 0) cioè non ha nessun carattere racchiuso dentro le virgolette, tu hai fatto un controllo sulla stringa nulla (puntatore nullo)
 

MPG

Utente Attivo
544
4
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:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Stai sbagliando la chiamata alla funzione... perchè specifichi il tipo di dato?
Anche l'argomento della funzione non è corretto.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 
  • Mi piace
Reazioni: Andretti60

MPG

Utente Attivo
544
4
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' ;
}
Post unito automaticamente:

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:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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?
 

MPG

Utente Attivo
544
4
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;
}
Post unito automaticamente:


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:

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili