Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-10-2006, 17: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, 17: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 17:51.
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2006, 19: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, 19: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, 08: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, 12: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 12:28.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2006, 13: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, 19: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, 21: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, 02: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, 02: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, 07: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, 08: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, 18: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, 19: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 18-10-2006, 00: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, 09: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, 11: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


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Vaticano, la Messa si traduce in 60 ling...
Kia prepara il facelift della Kia EV5: n...
La nuova Alpine A110 elettrica sfrutterà...
Il nuovo entry level della gamma MacBook...
Panasonic 55'' QLED con Dolby Vision e F...
TOP 250 PLUS e TOP 300 PLUS ritornano: v...
Incentivi auto elettriche, si va verso r...
Crimson Desert non è un Soulslike...
Sostituzione caldaia con nuovi sistemi, ...
La Germania verso il divieto e il ban de...
Questo super TV Samsung OLED da 65'' con...
Android Auto 16.3 svela due segreti di G...
Apple Podcasts introduce video con HLS e...
Gli iPhone 17, 17 Pro e 16e sono conveni...
Sentite l'Agenzia delle Entrate: le e-bi...
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: 15:04.


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