Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-10-2006, 16:34   #1
Abdujaparov
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2006, 16:45   #2
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da Abdujaparov
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?
devi ritornare l'indirizzo del primo elemento: non PrimoPiatto[] ma PrimoPiatto*
Quote:
Originariamente inviato da Abdujaparov
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".
se vuoi puoi crearti la funzione da solo ma credo sia abbastanza difficile, quindi ti conviene usare le regular expression.
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 16:51.
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2006, 18:02   #3
Abdujaparov
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2006, 18:18   #4
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da Abdujaparov
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.
nono non perdi l'indicazione della dimensione: il valore di return della funzione è un array (anche se non sembra), quindi puoi tranquillamente mettere il valore di ritorno della funzione in una variabile e poi accedere agli elementi tramite [] : variabile[0], variabile[1] ...
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2006, 07:52   #5
Abdujaparov
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2006, 11:20   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Abdujaparov
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.

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 11:28.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2006, 12:47   #7
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da Abdujaparov
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.
no
  1. se la funzione menuPrimi ritorna un array di qualcosa, devi mettere come valore di ritorno il tipo dell'array piu' "*" (ad esempio int* nomefunzione...): se menu è un array di int devi scrivere int* menuPrimi, non PrimoPiatto* menuPrimi, che non c'entra niente.
  2. ritornando menu[0] ritorni solo quell'elemento e non lintero array: devi fare return menu;
  3. non puoi scrivere PrimoPiatto menu=menuPrimi() perchè menuPrimi restituisce un array, non un oggetto primopiatto; se invece menu (qello restituito da menuPrimi) è una variabile contenuta nella classe PrimoPiatto, devi scrivere
    Codice:
    PrimoPiatto menu;
    menu.primi=menuPrimi();
  4. come già detto da tomminno, gli array in c++ non hanno la funzione lenght, ma se vuoi puoi farla tu:
    Codice:
    //considerando menu come un array di int:
    int lenght(int* array_di_int)
    {
    for(int i=0;array_di_int[i]!=0;i++){}
    return i;//ritorna la lunghezza di array
    }
    //per usarla, pero' non dovrai scrivere nomearray.lenght, ma lenght(nomearray)
se vuoi che ti aiuti piu precisamente dovresti spiegarmi +o- cosa vorresti fare perchè non si capisce bene
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2006, 18:05   #8
Abdujaparov
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2006, 20:13   #9
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da Abdujaparov
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.
questo dovrebbe funzionare:
Codice:
PrimoPiatto* funzione(/*argomenti*/)
{
PrimoPiatto array[10];
//fai cio' che vuoi
return array;
}
prova e fammi sapere
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2006, 01:42   #10
cionci
Senior Member
 
L'Avatar di cionci
 
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;
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2006, 01:48   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da AngeL)
questo dovrebbe funzionare:
Quello che viene ritornato è un puntatore a dello spazio non allocato...lo spazio riservato per array viene deallocato automaticamente all fine del metodo... E' un grave errore
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2006, 06:28   #12
Abdujaparov
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2006, 07:36   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Abdujaparov
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?
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
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 17:55   #14
Abdujaparov
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 18:53   #15
Abdujaparov
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 23:07   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Abdujaparov
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'
Posta il codice dentro cui hai dichiarato eccoli...sembra che tu l'abbia dichiarato in un ramo di uno switch e non si può...

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);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 08:17   #17
Abdujaparov
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:izziniConTesto(string testo){
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.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 10:13   #18
cionci
Senior Member
 
L'Avatar di cionci
 
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...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Un graffio è sufficiente a far de...
Airbus realizzerà altri 229 satel...
Arianespace lancerà altri satelli...
Eutelsat ha annunciato di aver affidato ...
PLD Space ha annunciato il nuovo razzo s...
CMF Clip Pro, tanta autonomia e design u...
Tre leggende del rally sbarcano in Asset...
iPhone 18 Pro Max, il chip A20 Pro mostr...
Samsung porterà il Privacy Displa...
WINDTRE BUSINESS trasforma la rete mobil...
Anthropic ammette un quarto caso di acce...
Mazda CX-6e, il primo test drive: quando...
La serie HONOR Magic 9 arriva a fine set...
Anker MagGo Power Bank 2 Pro arriva in I...
iRobot rilancia con Roomba Duo, il proto...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v