|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
C++ valore di ritorno di una funzione e ricerca testo
Salve a tutti, i miei problemi con il c++ non finiscono mai, effettivamente sono a dir poco scarso.
Data la mia ignoranza vorrei chiedervi questo. Io in java tranquillamente definivo una classe ed una funzione di un altra classe che mi ritornava un array della classe precedente cioè: Definisco la classe PrimoPiatto e potevo definire una funzione di un'altra classe del tipo: PrimoPiatto[] menuPrimi(String nome){....} In C++ ho provato a fare una cosa simile e mi sono preso una marea di insulti io però ho la necessità di tornare un array o qualcosa di simile, come posso fare? Un'altra domanda, io dovrei cercare all'interno di una stringa di testo una frase, cioè: string testo_vario="Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura che la dritta via era smarrita ....." devo cercare string daCercare="di nostra vita". Cercare un token lo so fare ed è una fesseria, per cercare tutta la frase devo implementare io di sana pianta una cosa simile controllando i token a gruppi a gruppi con cicli e controcicli o c'è qualche speranza per semplificarmi la vita? Grazie, ciao ciao. |
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
Quote:
ci sono decine di librerie che aggiungono le regular expression al c++ su google, purtroppo non so consigliarti la migliore. Ultima modifica di AngeL) : 14-10-2006 alle 17:51. |
||
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Grazie mille, tornando PrimoPiatto* però perdo l'indicazione della dimensione dell'array. Per avere anche la dimensione dovrei creare un nuovo oggetto contenente il puntatore al primo elemento e la dimensione dell'array?
Oppure potrei passare un vettore o una lista? Con vettore e lista dovrei ritornare il puntatore o posso direttamente ritornare lista o vettore? Grazie, ciao ciao. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Cioè ricapitolando:
io potrei dichiarare una funzione così: PrimoPiatto* menuPrimi(....){ return menu[0]; } e poi cont PrimoPiatto* menu=menuPrimi(....); for(int i=0; i<menu.lenght();i++) ...... Quindi potrei fare in questo modo senza problemi? Grazie, ciao ciao. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
In C++ gli array non sono classi. Non hai il metodo lenght che ti indica quanti elementi sono presenti! A seconda di quello che ci devi fare potresti usare vector, list, queue, map, hash_map... Io farei così: Codice:
vector<PrimoPiatto>& menuPrimi(....){
return menu;//Con menu dichiarato come "vector<PrimoPiatto> menu;"
}
vector<PrimoPiatto> & menu=menuPrimi(....);
for(int i=0; i<menu.size();i++)
......
//Oppure, meglio, con gli iteratori
vector<PrimoPiatto>::iterator it;
for(it = menu.begin(); it != menu.end(); it++)
...
Ultima modifica di tomminno : 15-10-2006 alle 12:28. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Spero di essere chiaro e lineare.
Voglio tornare un array di oggetti PrimoPiatto. La funzione prende determinati parametri e ritorna un array di oggetti PrimoPiatto. L'oggetto PrimoPiatto l'ho definito io per gli affari miei. E' una cosa piuttosto semplice, spero. Grazie per la pazienza, ciao ciao. |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
Codice:
PrimoPiatto* funzione(/*argomenti*/)
{
PrimoPiatto array[10];
//fai cio' che vuoi
return array;
}
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma la libreria standard il C++ che ce l'ha a fare ?
Esistono i vector... vector <PrimiPiatti> menuPrimi(...) In alternativa puoi comunque usare l'allocazione dinamica: void menuPrimi(/*parametri*/, PrimiPiatti *&menu, int *dimensione) { ..... dimensione = XXXX; vettore = new PrimiPiatti[dimensione]; ..... } La richiami così: PrimiPiatti *primi, dimensione; menuPrimi(primi, dimensione); Ovviamente poi dovrà essere deallocata: delete[] primi; |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Grazie a tutti, più tardi provo ma credo che alla fine mi orienterò su un array o su una lista, dopo aver rivisto attentamente la funzione che sto scrivendo.
Grazie a tutti, ciao ciao. |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Codice:
string testo(".........");
string s("stringa da cercare");
string::size_type pos = 0;
while((pos = testo.find(s, pos)) != string::npos)
{
//fai qualcosa sapendo che all'indice pos c'è una stringa valida
...
pos++; //per non ritrovare la stringa nella stessa posizione
}
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Salve a tutti ho applicato i vostri consigli però non sono riuscito a risolvere nulla cioè:
list<Pizzino>& PizzinoCtrl::allPizzini(){ return provenzano; } La richiamo così: list<Pizzino> &eccoli=motore.allPizzini(); ed il risultato è questo: c:\documents and settings\angelo\documenti\visual studio 2005\projects\quarto\postit\postit.cpp(184) : error C2361: initialization of 'eccoli' is skipped by 'default' label c:\documents and settings\angelo\documenti\visual studio 2005\projects\quarto\postit\postit.cpp(175) : see declaration of 'eccoli' Come posso risolvere? Grazie, ciao ciao. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Cionci non capisco come funziona il pezzo che mi hai scritto.
Io devo settare a true un booleano se la la stringa da cercare è nel testo. Non capisco cosa fa quel ciclo, puoi spiegarmelo? Grazie, ciao ciao. |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Per il mio codice: semplicemente cerca una stringa fino a quando il valore ritornato da testo.find è diverso da string::npos (che è il valore ritornato quando non trova più sottostringhe uguali a quella cercata)... Se devi semplicemente settare un booleano se la stringa trovata è nel testo allora fai così: boolean trovato = (testo.find(s, 0) != string::npos); |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Grazie mille, c'era uno switch in mezzo e non me ne rendevo conto.
Ho fatto in questo modo: vector<Pizzino> PizzinoCtrl: vector<Pizzino> speriamo; //FA QUALCOSA CON LA RICERCA TESTO CHE STO PROVANDO GRAZIE ATE return speriamo; } Dentro un'altra classe: vector<Pizzino> trovati;//dichiarato fuori dallo switch //invoco il metodo in questo modo trovati=motore.pizziniConTesto("ehehe"); Ho tolto il riferimento perchè ritorno un vettore che è una variabile locale, ho fatto bene? Ora provo il metodo per la ricerca del testo grazie infinite. Ciao ciao. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Hai fatto bene, in questo modo usa l'operatore di assegnazione e dovrebbe andare bene...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:53.



















