PDA

Visualizza la versione completa : [C++] Problema ricerca stringa in array


sonnyyy77
19-11-2009, 17:04
Ciao a tutti finalmente dopo numerosissime vicissitudini sono tornato!!

Voi direte e chi se ecc... :D

comunque ho un problema strano con una funzione che dovrebbe estrapolarmi il numero dell' elemento dell'array. vi posto il codice:



#include <cstdlib>
#include <iostream>

using namespace std;

//variabili globali
string vettore[2]={"pane","panettone"} ;
string cercata ;
int limite = 2 ;

//funzione per cercare la stringa
int trovastringa(string cercata, string vettore[], int limite)
{
while(--limite>=0)
{
if (cercata == vettore[limite])
break ;
return limite ;
}
}

//inizio main
int main(int argc, char *argv[])
{
int numeroRestituito ;

cout << "inserire stringa da cercare:" << endl;
cin >> cercata ;

numeroRestituito = trovastringa(cercata ,vettore, limite);
cout << endl << "numeroRestituito vale : " << numeroRestituito ;

getchar();
getchar();
}

se scrivo pane il valore di numero restituito dovrebbe essere 0 , e invece mi da 1

ma se scrivo panettone , il secondo elemento mi da come valore di numeroRestituito:

2088810073
:confused:

se scrivo una stringa qualunque mi restituisce 1........

non capisco!!! :bhò:

p.s:

Sto usando l'ambiente di sviluppo Dev-c++ 4.9.9.2

p.p.s: Premetto che sono proprio agli inizi...... :mem:

Stoicenko
19-11-2009, 17:48
non dovrebbe neppure compilartelo..
la funzione non ritorna sempre un numero..

cmq direi che intanto quel while è inguardabile, la funzione dovrebbe avere il vettore passato per riferimento o per puntatore perchè così fai un sacco di copie per nulla.

poi le variabili globali le toglierei.. fanno solo confusione e non servono a nulla..

ps: cambia compilatore

ant_alt
19-11-2009, 18:14
il compilatore gira, ma ricordo io male o non si può inizializzare una var globale fuori da una funzione? :master: :fagiano:

cmq non credo di aver capito ancora cosa deve fare il programma

sonnyyy77
19-11-2009, 18:14
Come no? ritorna limite,
che al massimo diventa negativo -1
che poi era quello che volevo fare.... ma visto il risultato mi sfugge qualcosa. :)
come passo un vettore per riferimento?
&vettore ?

se non erro per puntatore e' cosi:
*vettore

scusa se le domande sono banali , ma e' da veramente poco che provo a scrivere in c++

Perche' e' inguardabile?

Quale compilatore mi consigli ??

e gia' che ci++ siamo , quale guida ? :D

ciaoooo


ant_alt:

e' una funzione di un altro programma che sto scrivendo,

e dovrebbe trovarmi in quale posizione si trova la stringa inserita

esempio:

facciamo conto che ho inserito in un vettore stringa
vettore[0] = "mela" ;
vettore[1] ="pera" ;

quello che mi serve e' ottenere la posizione di mela nel vettore

quindi se scrivo mela, dovrebbe restituirmi
0,

se scrivo pera dovrebbe restituirmi
1

e se scrivo qualcosa che non e' compresa nel vettore
dovrebbe restituire -1


e' giusto per capire come navigare in un array ed estrapolare le informazioni che mi servono.

ciao

senise
19-11-2009, 18:15
Stoicenko


Intanto quel while è inguardabile


E' vero, comunque visto che sei all'inizio, ti perdoniamo.

Non puoi confrontare le stringhe con ==
Prova così, dovrebbe funzionare, ho modificato il meno possibile.





#include <cstdlib>
#include <iostream>
#include <stdio.h>

using namespace std;

//variabili globali
string vettore[2]={"pane","panettone"} ;
string cercata ;
int limite = 2 ;

//funzione per cercare la stringa
int trovastringa(string cercata, string vettore[], int limite)
{
while(--limite>=0)
{
if ( cercata.compare(vettore[limite])== 0 )
{
return limite;
break ;
}
else
continue;
}
return -1;
}

//inizio main
int main(int argc, char *argv[])
{
int numeroRestituito ;

cout << "inserire stringa da cercare:" << endl;
cin >> cercata ;

numeroRestituito = trovastringa(cercata ,vettore, limite);
cout << endl << "numeroRestituito vale : " << numeroRestituito ;

getchar();
getchar();
}

shodan
19-11-2009, 18:19
Non puoi confrontare le stringhe con ==

Se sono std::string si.

senise
19-11-2009, 18:28
Se sono std::string si.


Hai ragione, chiedo scusa.



...
bool operator==(const string& c1, const string& c2);
...

sonnyyy77
19-11-2009, 18:36
grandi, grazie

per ora ho risolto, ma ho capito poco, forse e' meglio che continuo a studiare ancora....
poi vi richiedo...
anche perche' cosi capisco la meta' di quello che dite.
:D

ciao belli

MItaly
19-11-2009, 18:37
Originariamente inviato da ant_alt
il compilatore gira, ma ricordo io male o non si può inizializzare una var globale fuori da una funzione? :master: :fagiano:
Si può, invece. Se si tratta di un POD dovrebbe essere inizializzato staticamente direttamente nell'eseguibile, se invece è un oggetto viene inizializzato subito prima dell'esecuzione del main.

KrOW
19-11-2009, 18:52
Ciao ... Ci sono diversi errori:
1) Manca l' header <string> (e qui dovresti già ottenere degli errori da parte del compilatore)
2) La funzione trovastringa non ritorna sempre un valore (e anche qui il compilatore dovrebbe protestare)
3) La logica di trovastringa è sbagliata ... Prova così:

int trovastringa( string cercata, string vettore[], int limite )
{
// Scorri tutte le stringhe del vettore
while( --limite >= 0 )
{
// Se è stato trovata la stringa nel vettore, esci dalla funzione e
// restituiscine l' indice
if( cercata == vettore[ limite ] )
return limite;
}
// Se la stringa non è stata trovata, restituisci il valore -1
return -1;
}
Oltre a questo ti suggerisco anche io di CAMBIARE COMPILATORE ...
@ant_alt : Potresti anche scrivere una cosa del genere senza ottenere errori:

string stringhe[2] = { "stinga1", "stringa2" };
int indiceTrovato = trovastringa( "stringa1", stringhe, 2 );
string stringa3 = stringhe[0] + stringhe[1];
@MItaly : Scusa l' ignoranza, ma cosa sarebbe un POD ???

Loading