DOMANDA Stringhe C++

Stato
Discussione chiusa ad ulteriori risposte.

pabloski

Utente Èlite
2,868
916
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".
 

MPG

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

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
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.
 

MPG

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

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
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).
 

MPG

Utente Attivo
544
4
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.jpg
    errore.jpg
    277.6 KB · Visualizzazioni: 142

MPG

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

MPG

Utente Attivo
544
4
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.jpg
    errore2.jpg
    369.9 KB · Visualizzazioni: 151
  • errore3.jpg
    errore3.jpg
    370.1 KB · Visualizzazioni: 131
Ultima modifica:

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
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...
 

MPG

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

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
Ricontrolla l'if... stai assegnando, non comparando.
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili