Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
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


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Grazie a VLT è stata misurata dir...
Blue Origin annuncia un aerofreno ripieg...
Blue Origin annuncia una nuova versione ...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
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: 06:09.


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