DOMANDA Stringhe C++

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.
Sarebbe length. Il resto non è sbagliato sintatticamente, ma non fa quello che dice il punto 1. Da quello che si capisce, vuole che tu prenda il primo pezzo di stringa e lo sostituisca col secondo.

Cioè "PippoPluto" deve diventare "PlutoPippo".
 
Fatto cosi' ma non va..
Mi blocca su int dim=a.lenght ();
Per quello che mi dici infatti anche io pensavo che con quel
int scambio= a[0];
a[0]=a[dim-1];
a[dim-1]=scambio

effettuo lo scambio del primo carattere con l'ultimo della stringa..
??????


Codice:
#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

string stringa (string a)
{
int dim=a.lenght ();
if (dim >=2)
{
int scambio= a[0];
a[0]=a[dim-1];
a[dim-1]=scambio;
}
return a;
}

int main()
{

sdrand(time(NULL));
string a:
    con a:
   cout<< stringa(a);
   return 0
   }

[\code]
 
Certo che studiare proprio non ti piace.Meglio perdere delle ore in questo modo. :asd:
Stai accedendo al primo carattere della stringa, lo stai memorizzando in un intero, e poi lo assegni all'ultima posizione della stringa.

Il punto a) richiede altro:

a)Prende una stringa come parametro e scambia la prima metà con la seconda;

del main() non si capisce molto, postalo corretto.
 
Sono tutto il pomeriggio qui tra filosofia e informatica, altro che divertirmi.....
Ecco corretto pero' non so come impostarlo giusto a questo punto..

Codice:
#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

string stringa (string a)
{
int dim=a.lenght ();
if (dim >=2)
{
int scambio= a[0];
a[0]=a[dim-1];
a[dim-1]=scambio;
}
return a;
}

int main()
{

sdrand(time(NULL));
string a;
    cin >>a;
   cout<< stringa(a);
   return 0;
   }
 
Ultima modifica:
Non capisco perchè utilizzi sdrand.
Stai terminando due istruzioni con i "due punti" invece che con il punto e virgola.

Al limite ciò che hai svolto è il punto c).
Per il punto a) vale tutto quanto detto da pabloski. Devi scambiare la prima metà con la seconda e non solo 1 carattere.

Comunque se compili il codice e lo esegui, capisci almeno dove sono gli errori di sintassi... oltre che di logica (in quanto vedresti che il programma non fa quello che deve).
 
Scusa sono cotto ... questo è l'esercizio C.
Pero' mi blocca qui
int dim=a.lenght ();
e non capisco perchè......
Allego screenshot.
sdrand posso anche toglierlo.
 

Allegati

  • errore.webp
    errore.webp
    170.3 KB · Visualizzazioni: 142
capito......

Codice:
#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

string stringa (string a)
{
int dim = a.length ();
if (dim >=2)
{
int scambio= a[0];
a[0]=a[dim-1];
a[dim-1]=scambio;
}
return a;
}

int main()
{

// sdrand(time(NULL));
string a;
    cin>> a;
   cout<< stringa(a);
   return 0;
   }
 
Ultima modifica da un moderatore:
Dunque in questi primi due ho errori che vi allego.
Vorrei anche cosa ne pensate dell'ultimo eserciso sullo scambio prima e seconda meta'.


Codice:
// Riceve due stringhe come parametri e restituisce true se sono uguali, false altrimenti;

#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

bool stringaequal (string a, string b)
{

    int dim=a.length();
    int dim1=b.length();
    if (dim==dim1)

{
    for (int i=0; i<dim; i++)
{
    if(a[i]=b[i])
{
    return true;
}
else
{
    return false;
}
}
}
int main ()
{

    string a;
    string b;
    cin>> a;
    cin>> b;
    cout << stringaequal (a, b);

    return 0;
}

[\code]
*******************************************************************

[code]
/Prende come parametro una stringa ed un carattere e restituisce il numero
// di occorrenze del carattere nella stringa.

#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;
}
[\code]

**************************************************
[code]
//Prende una stringa come parametro e scambia la prima metà con la seconda;

#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

string stringa (string a)
{

    int dim=a.length();
    int b=dim/2;
    int c=dim/2+1;
    if (dim%2==0)
{
    for (int i=0; i<dim/2; i++)
{
    int scambio =a[i];
    a[i]=a[b];
    a[b]= scambio;
    b++;
}
return a;
}
else
{
    for (int i=0; i<dim/2; i++)
    {
        int scambio=a[i];
        a[i]=a[c];
        a[c]=scambio;
        c++;

    }
    return a;
}
}


int main ()
{

    string a;
    cin>> a;
    cout << stringa (a);
    return 0;
}

[\code]
 

Allegati

  • errore2.webp
    errore2.webp
    120.1 KB · Visualizzazioni: 151
  • errore3.webp
    errore3.webp
    120.4 KB · Visualizzazioni: 131
Ultima modifica:
Prima cosa: indentazione
Il codice va scritto in una maniera decente per poterlo capire prima di tutto da soli e poi anche dagli altri. Quindi, non puoi mettere le parentesi così perché come non capisci tu non capiamo noi.
Il codice va scritto così
C++:
int numeroOccorrenze(std::string s, char c)
{
    int b;
    {
        int c;
        {
            char f;
            for (; ;)
            {
                if (true)
                {

                }
            }
        }
    }
}
Non così
C++:
int numeroOccorrenze(std::string s, char c)
{
    int b;
{
    int c;
{
    char f;
    for (; ;)
{
    if (true)
{

}
}
}
}
}
Scritture simili lasciale a chi fa gare di offuscazione del codice.
Il tuo codice indentato bene è questo:
C++:
std::string occorrenze(std::string a, char b)
{

    int dim = a.length();
    int conta = 0;
    { //Perché questa parentesi?
        for (int i = 0; i < dim; i++)
        {
            if (a[i] == b)
            {
                conta++;
            }
        }
        std::cout << conta;


    }
Si nota perfettamente la mancanza di una parentesi che è quella della funzione. Perciò, visto che il compilatore non sa quello che vuoi fare, per lui sei ancora all'interno della funzione occorrenze quando definisci la funzione main, e ti avverte con "error: a function definition...".
Il secondo errore non mi pare impossibile da capire, "expected } ...", boh semplice inglese. Tutto si ricollega a quella { buttata a caso a riga 19.
Il terzo errore, sebbene non è detto possa essere corretto visto l'errore sintattico, esprime un secondo problema. Ipotizzando ora il codice sia corretto, nel main chiami la funzione occorrenze da cout. Questo vuol dire che ti interessa scrivere a schermo ciò che occorrenze ritorna (cioè una stringa) ma tu da tale funzione non ritorni un bel nulla ma vai a scrivere a schermo la variabile conta. Al massimo devi ritornare conta e quindi cambiare il tipo di ritorno della funzione a int.

Infine perché chiamare una stringa parametro a? Cosa vuol dire a? Semmai chiamala s se non vuoi chiamarla stringa, e il carattere c. Non ha poi senso dichiarare dim che è un solo alias per s.lenght() che vai ad utilizzare una sola volta nella funzione. Non mi sembra che for (int i = 0; i < s.lenght(); i++) sia poco chiaro...
 
Grazie pero' questo esercizio true false mi viene 1 cioè vero..

Grazie intanto. In questo esercizio mi vine sempre 1 cioè vero, cosa sbaglio?

Codice:
#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

bool stringaequal (string a, string b)
{

    int dim=a.length();
    int dim1=b.length();
    if (dim==dim1)


    for (int i=0; i<dim; i++)
                 {
                    if(a[i]=b[i])
                       {
                        return true;
                       }
                       else
                          {
                         return false;
                           }
                   }
}
int main ()
{

    string a;
    string b;
    cin>> a;
    cin>> b;
    cout << stringaequal (a, b);

    return 0;
}

[\code]
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top