Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C] Stringhe

  1. #1

    [C] Stringhe

    Ciao...
    Devo fare un programmino che apra un file di testo, ne legga il contenuto e scriva in delle stringhe i caratteri che trova fra virgolette...
    Il file è fatto più o meno così (chiaramente può variare):
    codice:
    a "blabla bla bla"
    b "biribirubu"
    terza_stringa "altre stringhe..."
    cucu "la la la..."
    b + "gigi"
    pupupu b
    pupupu + a
    E l'interprete deve partire dalla prima riga e creare un oggetto di una struct con la proprietà "nome" uguale al primo valore che trova, e con la proprietà "valore" uguale al secondo valore...
    Se il secondo valore è tra "" chiaramente dovrà prendere quello... Se il secondo valore non è tra "" dovrà prendere il valore dell'oggetto con la proprietà "nome" uguale al secondo valore... Se invece come secondo valore trova un + dovrà aggiungere al valore dell'oggetto interessato il pezzo di stringa nuovo (il terzo valore nel file).

    Spero che abbiate capito, altrimenti ditemelo che riprovo a spiegarvelo...



    Adesso mi chiedo: Come faccio a fare ciò che voglio?
    Mi hanno detto di usare i vettori, ma cercando per internet ho letto che non rientrano negli standard e che, all'opposto dell'utilizzo degli array, l'utilizzo dei vettori può rallentare il programma...
    Cosa mi consigliate?

    Grazie
    PuffolottO

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012


    1) Spiegati meglio ( ) facendo un esempio magari che è + chiaro di qualsiasi spiegazione

    2) Se intendi i vettori STL, non sono supportati dal C quindi fregatene.
    Comunque se sai gestirli, i vettori 'normali non ad oggetti' possono molte volte sostituire i vettori STL.

    P.S. : Comunque la perdita di prestazioni è impercettibile, diversamente dalla flessibilità e potenza che aumentano tantone.

  3. #3
    Originariamente inviato da iguana13


    1) Spiegati meglio facendo un esempio magari che è + chiaro di qualsiasi spiegazione
    OK
    Guarda quest'esempio
    *Questo è il file su cui il programma in C deve lavorare... I commenti non ci sono in questo file, servono per farvi capire cosa deve succedere in quei casi.
    codice:
    a "CiAo" // viene crato un nuovo oggetto con la proprietà "nome" = "a" e la proprietà "valore" = "CiAo"
    secondo "secondA frAse" // nuovo oggetto... nome="secondo", valore="secondA frAse"
    pippo secondo // nuovo oggetto... nome="pippo", valore="secondA frAse" (il valore di "secondo")
    pippo + "la la" // alla proprietà "valore" dell'oggetto "pippo" viene aggiunto in fondo "la la"
    a + pippo // alla proprietà valore dell'oggetto "a" viene aggiunto in fondo "secondA frAsela la" che è il valore di pippo
    Ora credo di aver espresso un pò meglio ciò che deve fare il programma...

    2) Se intendi i vettori STL, non sono supportati dal C quindi fregatene.
    Comunque se sai gestirli, i vettori 'normali non ad oggetti' possono molte volte sostituire i vettori STL.

    P.S. : Comunque la perdita di prestazioni è impercettibile, diversamente dalla flessibilità e potenza che aumentano tantone.
    Ah... i vettori STL non posso usarli col C? In effetti negli articoli parlavano di C++... Peccato...
    Sapresti dirmi allora come posso fare?
    Che dimensione devo fare alla proprietà "valore"?
    Se gli do [10000] (ad esempio) mi sembra uno spreco immendo perchè i valori potrebbero essere anche di un solo carattere...
    Se invece gli do [10] non posso infilarci le stringhe più grosse...
    Inoltre come faccio per fare in modo che la dimensione si ampli quando aggiungo un pezzo al valore?
    Credo che la soluzione stia nei puntatori, ma li so usare pochissimo


    Riguardo la perdita di prestazioni dipende da quanto ne faccio uso... Programmo in C proprio per avere tutta la potenza che c'è (l'assembler sarebbe migliore, ma mi sembra un pò esagerato )... Se me ne sbattevo delle prestazioni usavo linguaggi più semplici




    PS: So come fare per creare nuovi "oggetti" della struttura e come sfogliare tutti gli oggetti per trovare quello con la proprietà "nome" che mi interessa...

  4. #4
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Per le dimensioni delle stringhe in questo caso il C++ ti sarebbe molto utile classe string), e siccome anche il vettore deve essere dinamico, sarebbe consigliato anche usare i vettori STL.

    Visto che sembri indipendente dal linguaggio, il C++ ti renderebbe tutto MOLTISSIMO + semplice a pari prestazioni.
    Che ne pensi? Passi al C++ o preferisci perdere la vita a creare funzioni per gestire l'allocazione dinamica di stringhe e vettori senza poter usufruire della programmazione ad oggetti?
    (I puntatori sono la cosa + importante in questo caso )


  5. #5
    Originariamente inviato da iguana13
    Per le dimensioni delle stringhe in questo caso il C++ ti sarebbe molto utile classe string), e siccome anche il vettore deve essere dinamico, sarebbe consigliato anche usare i vettori STL.

    Visto che sembri indipendente dal linguaggio, il C++ ti renderebbe tutto MOLTISSIMO + semplice a pari prestazioni.
    Che ne pensi? Passi al C++ o preferisci perdere la vita a creare funzioni per gestire l'allocazione dinamica di stringhe e vettori senza poter usufruire della programmazione ad oggetti?
    La seconda sembrerebbe più divertente...
    Ma scelgo la prima
    Il C++ lo conosco anche molto meglio del C... (parlo delle funzioni di i/o soprattutto)

    Sapresti darmi una mano sull'utilizzo dei vettori per fare il mio lavoro? Non ho mai usato i vettori STL...



    PS: Se ho un file oggetto in C e uno in C++ posso fare un linker con loro due?
    Il problema è che questa sarebbe una funzione che vorrei aggiungere a un programma abbastanza grosso e riscriverlo tutto è un pò pesantucco


    (I puntatori sono la cosa + importante in questo caso )
    Come anche in tutti gli altri casi :gren:
    Peccato che faccia un sacco di confusione coi puntatori... So come funzionano, cosa fa *, cosa fa & etc etc... Ma quando mi trovo a usarli... Boh!





    PS: Ho provato a compilare il programma in C++ invece che in C, senza apportare alcuna modifica... Il programma è stato compilato alla perfezione... Ma mi conviene usare le librerie del C++ (iostream e fstream al posto di stdio.h tanto per fare un esempio) oppure non c'è la più minima differenza nel farlo?

  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Molto + comodo e flessibile usare librerie del C++.

    Per il linker non lo saprei... in fondo i file oggetto sono già compilati ma la gestione degli oggetti è diversa... ma credi di sì.

    Per i vettori STL e le stringhe... è meglio che fai domande + precise.

    Per il vettore usi:
    codice:
    #include <vector>
    E per la stringa:
    codice:
    #include <string>
    Magari con un:
    codice:
    using namespace std;
    prima del main().

    Qualche ideuzza per schematizzare il programma.
    Innanzitutto i valori e nomi li memorizzi in un vettore dichiarato in questo modo:
    codice:
    struct variabile {
        string nome;
        string valore;
    };
    
    void main (){
        ...
        vector <variabile> elementi;
    }
    Per riferirti ad un elemento fai così (come negli array normali):
    codice:
    cout << "Nome della variabile 100: " << elementi[99].nome << " - Valore: " << elementi[99].valore << endl;

  7. #7
    Ok, tutto chiaro...
    (ora sembra java più che c )

    Esattamente però come gestisco le stringhe e i vettori?
    Se voglio aggiungere qualche carattere a una stringa come faccio? Con la funzione strcat penso, la vera domanda è: devo ridimensionarla prima, o si gestisce da sola?
    E riguardo ai vettori... Come aggiungo (e rimuovo) un elemento?
    Hai da darmi qualche link a riguardo?

    Ho altre due domande...
    L'header string definisce anche le varie funzioni con le stringhe (strlen, strcat, strcmp etc)?

    E la più importante:
    Ho letto che l'header vector non è negli standard...
    Questa cosa non mi convince molto...
    Quale complicazione potrebbe causare questa cosa?


    Grazie

  8. #8
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Tu stai facendo un misto tra C e C++!
    Quale vuoi usare?

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.