Stai usando un browser non aggiornato. Potresti non visualizzare correttamente questo o altri siti web. Dovreste aggiornare o usare un browser alternativo.
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.
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;
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.
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]
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...