Programma con uso di array

di il
19 risposte

Programma con uso di array

Avrei bisogno di una mano per risolvere questo esercizio di array
ecco il testo
Scrivere una funzione C++ che, data una stringa s,
restituisce la stringa ottenuta rimuovendo da s tutti i caratteri che sono
immediatamente seguiti da due vocali.
Esempio1: s= “Priamo”. Il metodo restituisce la stringa “Piamo” (rimossa la r).
Esempio 2: s= “aiuola”. Il metodo restituisce “uola” (rimossi a ed i ).
Esempio 3: s= “pippo”. Il metodo restituisce “pippo” (nessun carattere rimosso)


#include<iostream>
#include<string>
using namespace std;
string new_stringa(string s, string t){
int ls=s.length();
int i;
for(i=1;i<ls;i++){
if(s.substr(i,1)=="a"||"e"||"i"||"o"||"u" && s.substr(i+1,1)=="a"||"e"||"i"||"o"||"u")
t=s.substr(i,ls-i);
}
cout<<t;
}

int main(){
string p;
string r=p;
cout<<"Inserisci una stringa"<<endl;
cin>>p;
new_stringa(p,r);

return 0;
}

19 Risposte

  • Re: Programma con uso di array

    Cos'è questo
    
    if(s.substr(i,1)=="a"||"e"||"i"||"o"||"u" && s.substr(i+1,1)=="a"||"e"||"i"||"o"||"u")
    
  • Re: Programma con uso di array

    È ciò che verifica la condizione richiesta nell'esercizio
    o almeno dovrebbe
    come posso risolvere?
  • Re: Programma con uso di array

    Praticamente volevo dire che scorrendo lettera per lettera a partire dalla prima non appena incontra una vocale e pure la seguente è anch'essa vocale allora la condizione viene verificata
  • Re: Programma con uso di array

    Come si verifica una multi espressione dentro un if,while ecc?
  • Re: Programma con uso di array

    Non capisco
    non so che dirti
    ma dov'è l'errore
    è generico(cioè nell'algoritmo) o c'è solamente qualche piccola imprecisione?
  • Re: Programma con uso di array

    
    if((a == b ) || (a == c))
    non
    
    if((a == b) || c)
    
    capito adesso
  • Re: Programma con uso di array

    Credo di si
    ma quello che non ho capito e se così facendo il programma o l'agoritmo di per sè siano corretti
    che dici allora?
  • Re: Programma con uso di array

    E' un brutte force, ci sono molti altri modi migliori per fare sta cosa. Non ho provato il programma quindi non so se l'algoritmo è corretto.
  • Re: Programma con uso di array

    Insomma qualcuno mi può aiutare e trovare un algoritmo per risolvere questo esercizio?
    grazie anticipatamente
  • Re: Programma con uso di array

    Prima impara a scrivere codice corretto poi inizia a sviluppare algoritmi. Impara anche ad usare funzioni. Una funzione utlie può essere quella che prende in ingresso un carattere e che ti ritorna true se è una vocale. Spezzettare un problema in piccole parti fa parte della programmazione, se non sei capace a fare questo non riusciresti mai a capire un algoritmo. Sei capace a fare una funzione simile?
  • Re: Programma con uso di array

    Ecco qua ho corretto qualche errore formale
    
    
    
    #include<iostream>
    #include<string>
    using namespace std;
    string new_stringa(string s, string t){
    int ls=s.length();
    int i;
    for(i=1;i<ls;i++){
    string prec=s.substr(i,1);
    string succ=s.substr(i+1,1);
    if((prec=="a")||(prec=="e")||(prec=="i")||(prec=="o")||(prec=="u") && (succ=="a")||(succ=="e")||(succ=="i")||(succ=="o")||(succ=="u"))
    t=s.substr(0,i-2)+s.substr(i,ls-i);
    }
    cout<<t;
    return t;
    }
    
    
    int main(){
    string p;
    string r=p;
    cout<<"Inserisci una stringa"<<endl;
    cin>>p;
    new_stringa(p,r);
    
    return 0;
    }
    
  • Re: Programma con uso di array

    Confrontalo col mio adesso.
    
    #include <iostream>
    #include <set>
    #include <string>
    #include <algorithm>
    
    std::set<char> vocali;
    
    
    
    bool isVowel(const char & c)
    {
    	return (vocali.find(c) != vocali.end());
    }
    
    struct predicate
    {
    	predicate(const std::string & str) : m_str(str) , lastPos(0){}
    
            const bool operator()(char ch) 
            {
    			size_t pos = m_str.find(ch,lastPos);
    			if(pos + 2 < m_str.length())
    			{
    				lastPos = pos + 1;
    				return (isVowel(m_str[++pos])) && (isVowel(m_str[++pos]));
    			}
    			return false;
            }
    
            private:
    			const std::string m_str;
    			size_t lastPos;
    };
    
    
    int main()
    {
    	vocali.insert('a');
    	vocali.insert('e');
    	vocali.insert('i');
    	vocali.insert('o');
    	vocali.insert('u');
    
    	std::string str("aiuola");
    
    	predicate prd(str);
    	str.erase(std::remove_if(str.begin(),str.end(),prd),str.end());
    
    	std::cout << str;
    }
    
    Come vedi l'algoritmo esiste e non c'è bisogno di fare mille if. Poi non capisco perche usi substr quando l'operatore [] offerto dalla stringa fa la stessa cosa.
  • Re: Programma con uso di array

    Piccola modifica per eliminare il std::set che magari non hai ancora imparato.
    
    #include <iostream>
    #include <string>
    #include <algorithm>
    
    std::string vocali("aeiuo");
    
    bool isVowel(const char & c)
    {
    	return (vocali.find(c) != std::string::npos);
    }
    
    struct predicate
    {
    	predicate(const std::string & str) : m_str(str) , lastPos(0){}
    
            const bool operator()(char ch) 
            {
    			size_t pos = m_str.find(ch,lastPos);
    			if(pos + 2 < m_str.length())
    			{
    				lastPos = pos + 1;
    				return (isVowel(m_str[++pos])) && (isVowel(m_str[++pos]));
    			}
    			return false;
            }
    
            private:
    			const std::string m_str;
    			size_t lastPos;
    };
    
    
    int main()
    {
    	std::string str("aiuola");
    
    	predicate prd(str);
    	str.erase(std::remove_if(str.begin(),str.end(),prd),str.end());
    
    	std::cout << str;
    }
    
  • Re: Programma con uso di array

    Si ma non l'hai eliminato std::set
    io non l'ho ancora imparato
    e poi volevo sapere
    se cortesemente me lo puoi far vedere come si risolve senza usare gli struct
    grazie anticipatamente
Devi accedere o registrarti per scrivere nel forum
19 risposte