Esercizio C++

di il
6 risposte

Esercizio C++

Ciao ragazzi, sono uno studente universitario e avrei un problema: sto cercando di capire il linguaggio c++ ed eseguendo esercizietti vari per prendere la mano e di recente ne ho trovato uno che non riesco a risolvere. forse a voi può sembrare semplice(sicuramente lo sarà), ma non per me.
in pratica abbiamo un array monodimensionale con lettere e il problema dice che se nell'array sono presenti dei tremini con l'asterisco, questi devono essere eliminati. se delle lettere si trovano tra 2 asterischi ecneh esse devono essere eliminate. stampare il nuovo array e determinare la nuova dimensione. es:
dimensione di partenza= 20
abcd*efghticnb*edvrt
nuova dimensione = 9
abcdedvrt
ecco come l'ho impostato io, ma non ho completato la funzione ELIMINA e non so come cancellare i termini tra gli asterischi,mentre per la dimensione dell'array ho già qualcosa in mente che metterò in seguito:

#include <iostream>
#include <iomanip>
using namespace std;
void stampa(char frase[],int N)
{
for(int i=0;i<N;i++)
{
cout<<frase;
}
}
void elimina(char frase[], int N){
for(int i=0;i<N;i++)
{
if(frase=='*')
{
frase=0;
}
}
}
int main() {
cout<<"ELIMIARE ASTERISCHI"<<endl;
char frase[10];
for(int i=0;i<10;i++)
{
cout<<"INSERIRE LETTERA";
cin>>frase;
cout<<endl;
}
stampa(frase,10);
elimina(frase,10);
cout<<endl;
stampa(frase,10);
return 0;
}

grazie ragazzi

6 Risposte

  • Re: Esercizio C++

    Prova con qualcosa del genere:
    a) cerca primo * (vedi funzione strchr() oppure fai la ricerca con un ciclo)
    b) se non lo trovi esci
    c) tieniti salvato la posizione di partenza in un char *ptr_start;
    d) cerca successivo * (vedi funzione strchr() oppure fai la ricerca con un ciclo)
    e) se non lo trovi esci
    f) salvati la posizione di fine in un char *ptr_end;
    g) strcpy(ptr_start, ptr_end+1)
  • Re: Esercizio C++

    L'ho modificato in questo modo ma non funziona crashando;
    #include <iostream>
    #include <string.h>
    using namespace std;
    void elimina(char frase[]){
    for(int i=0;i<100;i++){
    if(frase=='*'){
    char *Ptr_start;
    i=*Ptr_start;
    for(int j=*Ptr_start;j<100;j++){
    if(frase[j]=='*'){
    char *Ptr_end;
    j=*Ptr_end;
    for(int k=*Ptr_start;k<*Ptr_end;k++){
    frase[k]=0;
    }
    }
    }
    }
    }
    }
    void stampa(char frase[]){
    for(int i=0;i<100;i++)
    {
    if(frase!=0)
    {
    cout<<frase;
    }
    }
    }
    int main() {
    char frase[100];
    cout<<"INSERISCI FRASE"<<endl;
    cin.getline(frase,100);
    cout<<frase;
    elimina(frase);
    stampa(frase);
    }
  • Re: Esercizio C++

    Innanzitutto dovresti utilizzare i tag CODE per postare codice, altrimenti non si capisce niente
    Comunque, perchè fai un ciclo for() quando per scorrere una stringa ti basta controllare di non essere arrivato al terminatore?
    int i=0;
    while(frase[i])
    {
       // ...
       i++
    }
    La mia impressione è che tu stia affrontando un esercizio troppo complicato per il tuo livello di comprensione. Inizia con qualcosa di più semplice, ad esempio potresti provare a trasformare tutti i caratteri in maiuscolo o tutti in minuscolo.
  • Re: Esercizio C++

    Ti ringrazio per il consiglio(quel programma già l'ho fatto ).almeno potresti darmi la soluzione per vedere dove sbaglio o le regole del forum lo vietano?
  • Re: Esercizio C++

    almeno potresti darmi la soluzione
    La "soluzione", o meglio una delle possibili soluzioni, te l'ho già data: se l'hai capita puoi tradurla facilmente in C mentre se non l'hai capita puoi chiedermi spiegazioni.
    Dalla tua "traduzione" in C mi sembra che tu non l'abbia capita.
  • Re: Esercizio C++

    Non capisco come utilizzare la funzione di copia dei termini della stringa,ecco tutto.però dato che non esiste un'unica soluzione per un problema ho cercato di trovare un'altra strada
Devi accedere o registrarti per scrivere nel forum
6 risposte