PDA

View Full Version : [C++] copiare parole da lista a string


mistergks
19-02-2014, 19:09
Mi sono imbattuto in un problema del genere:
Data una lista di string in cui ho memorizzato un insieme di città come stringhe... voglio copiare tutte le città in una variabile string separandole ciascuna da una virgola e ordinandole secondo un ordine lessicografico.

La mia ipotesi di soluzione sarebbe quella di ordinare la lista con le funzioni sort() e unique(),
Poi con un ciclo for sulla lista mi copio le stringhe della lista nella variabile string e per ognuna inserisco la virgola.

Forse c'è un problema però: copiando nella variabile stringa sovrascrivo ogni volta il contenuto.. dovrei usare l'operatore += per non sovrascrivere e creare la stringa con le citta separate da virgola?

vendettaaaaa
19-02-2014, 19:40
Mi sono imbattuto in un problema del genere:
Data una lista di string in cui ho memorizzato un insieme di città come stringhe... voglio copiare tutte le città in una variabile string separandole ciascuna da una virgola e ordinandole secondo un ordine lessicografico.

La mia ipotesi di soluzione sarebbe quella di ordinare la lista con le funzioni sort() e unique(),
Poi con un ciclo for sulla lista mi copio le stringhe della lista nella variabile string e per ognuna inserisco la virgola.

Forse c'è un problema però: copiando nella variabile stringa sovrascrivo ogni volta il contenuto.. dovrei usare l'operatore += per non sovrascrivere e creare la stringa con le citta separate da virgola?
Beh...sì.
Ancora meglio, se la lista è lunga, con l'operatore += dovresti allocare nuovo spazio ogni volta. Meglio creare una stringa della dimensione giusta all'inizio, e poi riempirla una parola alla volta.

mistergks
19-02-2014, 20:00
.

mistergks
19-02-2014, 20:02
Non ho capito in che senso creare una stringa della dimensione giusta?

E poi... mi sta venendo un dubbio.. forse andrebbe usata solo la funzione sort().. perche non voglio eliminare le città ripetute!

vendettaaaaa
19-02-2014, 23:09
Non ho capito in che senso creare una stringa della dimensione giusta?

E poi... mi sta venendo un dubbio.. forse andrebbe usata solo la funzione sort().. perche non voglio eliminare le città ripetute!
In questo senso:
int len = 0;
for (const string& s : strings)
len += s.size();
len += strings.size() - 1; // devi aggiungere n - 1 virgole per separare le città

string result;
result.reserve(len);

// Ciclo per copiare le stringhe in result