Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81

    [c] Array Di Puntatori A Stringhe

    Ciato a tutti, anzi in particolare ciao Oregon, perchè so che sarai tu che mi aiuterai, come sempre ..
    Volevo fare qualcosa del tipo:
    - Finche c'è qualcosa in ingresso while((getline())>0)
    disponi la riga in ingresso in un vettore..

    Il problema nasce qundi dal fatto che io non so a priori quante righe in ingresso avro'..
    Ho quindi pensato di usare un array di puntatori a stringhe, ma visto che non li ho ben capiti, non so bene come muovermi..

    Avevo pensato a qualcosa del tipo:

    codice:
    char *vett[];
    
    i=0;
    while ((getline(line)>0)
        *vett[i++]=line[i];
    Ma sono certo di fare qualche grave errore a livello logico.

    E inoltre dopo aver fatto cio', come posso io lavorare con le varie celle di questo nuovo vettore riempito?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [c] Array Di Puntatori A Stringhe

    Originariamente inviato da maurymg
    Ciato a tutti, anzi in particolare ciao Oregon, perchè so che sarai tu che mi aiuterai, come sempre ..
    Non ti ci abituare ...

    Volevo fare qualcosa del tipo:
    Lo puoi fare a patto che

    1) il vettore di puntatori viene allocato con un numero adeguato di elementi oppure viene reallocato dinamicamente ...

    2) la getline alloca lo spazio per le linee ogni volta che viene chiamata

    Fatto questo, puoi lavorare con vett come se lavorassi con la variabile argv ....
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81
    Credo di aver capito...
    Ma se ad es io volvessi lavorare con la cella iesima del terzo vettore riempito dalla getline come dovrei fare?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da maurymg
    Credo di aver capito...
    Ma se ad es io volvessi lavorare con la cella iesima del terzo vettore riempito dalla getline come dovrei fare?
    Beh ... allora non e' vero che credi di aver capito ...

    Cosa intendi, esattamente?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81
    Ho capito che il vettore di puntatori deve venire allocato con un numero adeguato di elementi..
    Non ho capito invece csa intendi qua:
    la getline alloca lo spazio per le linee ogni volta che viene chiamata.


    Quello che volevo dire è;
    solitamente quando voglio fare un controllo tra vettori scrivevo ad es.

    if (vett[i]==line[c]) ....

    Ma in questo caso?


    Io so solo che dentro *argv[i] c'è l'indirizzo di un vettore.. ma se io volessi confrontare cio' che c'è dentro l'i-esima cella del primo vettore riempito con cio' che c'è dentro la j-esima cella del quarto vettore riempito come posso fare?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da maurymg
    Ho capito che il vettore di puntatori deve venire allocato con un numero adeguato di elementi..
    Non ho capito invece csa intendi qua:
    la getline alloca lo spazio per le linee ogni volta che viene chiamata.
    Ecco ... allora non avevi compreso ... questo e' un punto importante ...

    Devi modificare la tua funzione getline in modo che restituisca il puntatore alla linea allocata dinamicamente. Se usi sempre lo stesso vettore line allocato staticamente, non avrai tanti puntatori diversi ma sempre lo stesso ...

    Quello che volevo dire è; ...
    Come faresti con la variabile argv dei parametri inseriti da linea di comando ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81
    Originariamente inviato da oregon
    Ecco ... allora non avevi compreso ... questo e' un punto importante ...

    Devi modificare la tua funzione getline in modo che restituisca il puntatore alla linea allocata dinamicamente. Se usi sempre lo stesso vettore line allocato staticamente, non avrai tanti puntatori diversi ma sempre lo stesso ...
    Non ho ancora fatto l'allocazione dinamica.. Cioè so di che si tratta ma non l'ho mai adoperata.. domani infatti mi concentrero' proprio su questo..


    Come faresti con la variabile argv dei parametri inseriti da linea di comando ?

    Ecco, anche qui non saprei come fare.. ci avev già provato..

    Se questo *vett[i] indica il puntatore al vettore di stringhe.. così ++(*vett[i]) credo che avanzerei nelle celle del vettore che mi interessa.. ma non so proprio come riferirmi alla cella i-esima..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da maurymg
    Non ho ancora fatto l'allocazione dinamica.. Cioè so di che si tratta ma non l'ho mai adoperata.. domani infatti mi concentrero' proprio su questo..
    Beh ... allora affronta prima il problema dell'allocazione dinamica e poi passa al resto ...

    Ecco, anche qui non saprei come fare.. ci avev già provato..

    Se questo *vett[i] indica il puntatore al vettore di stringhe.. così ++(*vett[i]) credo che avanzerei nelle celle del vettore che mi interessa.. ma non so proprio come riferirmi alla cella i-esima..
    No ... ad esempio, puoi scrivere

    if(vett[0][0]==vett[1][0])

    per confrontare il primo carattere della prima e della seconda stringa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81
    Ok, sei stato molto chiaro!
    Domani farò qualcosa con l'allocazione e alla luce di quelle provero a fare cio' di cui ti parlavo sopra..
    Grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81
    Mi sono imbattuto in qualcosa del genere:

    codice:
    char *puntLinee [10];
    char *pp;
    
    while ( (getline(line, MAXLINE) > 0) && (i < 10) ) {
    
           pp=(char *) malloc(strln(line), sizeof(char));
    
           strcp(pp, line);
    
           puntLinee[i++]=pp;
    
           numLinee++;
    
           }
    Credo che significhi attrbuisici al puntatre pp la dimensione della tringa ricevuta in ingersso.
    Dopo di che copia la stringa in ingresso in pp, che conteerrà dunque esattamente la stringa senza spreco si spazio.
    Adesso attribuisci alla stringa iesima, proprio la stringa copiata pp.

    Cio' che non riesco a comprendere è (char*), sizeof (char).

    Mi è inoltre venuto un dubio, se io volessi convertire la riga i-esima in numero sarebbe possibile fare:
    atoi(puntLinee[i])

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.