Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C++] Problema ricerca stringa in array

    Ciao a tutti finalmente dopo numerosissime vicissitudini sono tornato!!

    Voi direte e chi se ecc...

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

    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


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

    non capisco!!!

    p.s:

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

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

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    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

  3. #3
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    il compilatore gira, ma ricordo io male o non si può inizializzare una var globale fuori da una funzione? :master:

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

  4. #4
    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 ?

    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151
    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.


    codice:
    #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();
    }

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non puoi confrontare le stringhe con ==
    Se sono std::string si.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151
    Se sono std::string si.
    Hai ragione, chiedo scusa.

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

  8. #8
    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.


    ciao belli

  9. #9
    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:
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    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ì:
    codice:
    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:
    codice:
    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 ???
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.