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

    [C++]Array di stringhe con dimensione ignota

    Buonasera,

    Ho un piccolo dubbio. Prendendo questo codice esemplificativo:
    codice:
    class X
    {
     private:
     string s[?];
    };
    devo inizializzare l'array s con delle parole inventate da me. Il problema è che non so quante parole mettere (in teoria più ne mettessi meglio è, ma questo è un altro discorso).
    Non sapendo il numero delle parole, non so dunque quanto sia grande l'array.
    Certo, la soluzione più ovvia sarebbe contare su carta le varie parole, ma è una soluzione intuitivamente stupida.
    Come posso risolvere?

    Saluti,
    signore del tempo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: [C++]Array di stringhe con dimensione ignota

    Originariamente inviato da signoredeltempo
    Buonasera,

    Ho un piccolo dubbio. Prendendo questo codice esemplificativo:
    codice:
    class X
    {
     private:
     string s[?];
    };
    devo inizializzare l'array s con delle parole inventate da me. Il problema è che non so quante parole mettere (in teoria più ne mettessi meglio è, ma questo è un altro discorso).
    Non sapendo il numero delle parole, non so dunque quanto sia grande l'array.
    Certo, la soluzione più ovvia sarebbe contare su carta le varie parole, ma è una soluzione intuitivamente stupida.
    Come posso risolvere?

    Saluti,
    signore del tempo.
    Alloca dinamicamente l'array oppure usa vector.

  3. #3
    L'allocazione dinamica non è una soluzione: la dimensione è incognita.
    Dovrei trovare un modo per usare l'inizializzazione del tipo:
    codice:
    string s[] = {"hello", "world"};

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Incognita sì, ma a un certo punto saprai quanti valori ci sono.

    Comunque, puoi usare un vector e risolvi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Incognita sì, ma a un certo punto saprai quanti valori ci sono.

    Comunque, puoi usare un vector e risolvi.
    Non ho capito cosa intendi con la prima affermazione.
    Credo che la miglior soluzione sia dichiarare s come variabile automatica di qualche funzione, anziché come dato membro.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da signoredeltempo
    Non ho capito cosa intendi con la prima affermazione.
    Probabilmente perché non ho capito cosa intendi con "L'allocazione dinamica non è una soluzione: la dimensione è incognita.".

    La dimensione sarà incognita ma quando aggiungi un dato/più dati allochi lo spazio necessari e li copi all'interno.

    Credo che la miglior soluzione sia dichiarare s come variabile automatica di qualche funzione, anziché come dato membro.
    Questa non l'ho capita.

    In realtà il vector è la soluzione migliore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    Probabilmente perché non ho capito cosa intendi con "L'allocazione dinamica non è una soluzione: la dimensione è incognita.".

    La dimensione sarà incognita ma quando aggiungi un dato/più dati allochi lo spazio necessari e li copi all'interno.
    Potrei decidere di inserire 10 parole, ma poi per inserirle nell'array non posso usare cicli, in quanto le parole sono diverse.
    Dovrei inserirle "manualmente", il che richiederebbe tempo.
    Ho detto 10 per dire un numero, ma se fossero di più?


    Questa non l'ho capita.

    In realtà il vector è la soluzione migliore.
    codice:
    public: void prova() { string s [] = {"hello", "world"}; }
    In questo caso s è un array di stringhe di tipo auto. Pensavo fosse chiaro...
    Non voglio usare vector, in quanto non è ancora nelle mie competenze.
    Altrimenti dovrei usare C++11 che se non erro, permette l'inizializzazione dei dati membro.
    Probabilmente la soluzione più elegante, è dichiarare s in una funzione.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se ti serve un membro fatto in quel modo molto probabilmente ti serve che sia static. Quindi

    codice:
    class X
    {
    private:
    	static const string s[];
    
    public:
    	...
    };
    
    const string X::s[] = { "Roma", "Napoli", "Milano" };
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Mi sembra una valida alternativa.
    Piccolo ot:
    codice:
    private: static const string s[];
    la dimensione non va specificata?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... viene determinata dalla linea in cui viene inizializzato il vettore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.