Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Come si splitta... in vector... una stringa?
Forum - C/C++ - Come si splitta... in vector... una stringa?

Avatar
tommyprojects (Normal User)
Rookie


Messaggi: 29
Iscritto: 26/07/2009

Segnala al moderatore
Postato alle 14:53
Giovedì, 20/08/2009
Ad esempio...

Ho una stringa "pippo"

string "pippo";

come posso ottenere un:

vector<string>caratteridipippo;

in modo che contenga 5 elementi:
p,i,p,p,o    


?   8-|

Graz

:)


Vero sapiente è colui che sa di non sapere [Socrate]
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 14:56
Giovedì, 20/08/2009
Fai un ciclo in cui scorri tutti i caratteri della stringa e poi aggiungi a caratteridipippo ogni elemento ottenuto.


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:00
Giovedì, 20/08/2009
Se sono semplici caratteri, e' un fatto, se sono numeri (come penso da quello che leggo su html.it ...) e' un'altra storia ...

E' meglio essere chiaro sin dall'inizio con la domanda ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
tommyprojects (Normal User)
Rookie


Messaggi: 29
Iscritto: 26/07/2009

Segnala al moderatore
Postato alle 19:13
Giovedì, 20/08/2009
Testo quotato

Postato originariamente da manvb.net:

Fai un ciclo in cui scorri tutti i caratteri della stringa e poi aggiungi a caratteridipippo ogni elemento ottenuto.



La seconda parte la so fare ma per la prima (..Fai un ciclo in cui scorri tutti i caratteri della stringa ..) qualche aiutino??? 8-|

THANKS :D


Vero sapiente è colui che sa di non sapere [Socrate]
PM Quote
Avatar
steve__92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 21:48
Giovedì, 20/08/2009
l'unico modo che mi viene in mente è appoggiandomi a un array di char (senza usare string)

ti faccio un esempio:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.         char a[30]; // al posto di usare string uso un array di char
  8.         cout << "inserisci una parola: ";
  9.         cin >> a; // metto la parola in input all' array di char se vuoi usare pure gli spazi devi usare cin.getline()
  10.         vector <char> v; // creo un vettore di char
  11.         for(int x = 0; a[x]!='\0'; x++) v.push_back(a[x]); // continuo ad aggiungere le lettere dell' array al vettore
  12. //      stampo tutte le lettere (per far vedere che ha funzionato)
  13.         cout << endl << endl;
  14.         for(int x=0;x<v.size();x++) cout << "v[" << x << "]" << "\t" << v[x] << endl;
  15.         system("pause>nul");   
  16. return 0;
  17. }


Ultima modifica effettuata da steve__92 il 20/08/2009 alle 21:49
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 0:14
Venerdì, 21/08/2009
Testo quotato

Postato originariamente da steve__92:

l'unico modo che mi viene in mente è appoggiandomi a un array di char (senza usare string)

ti faccio un esempio:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.         char a[30]; // al posto di usare string uso un array di char
  8.         cout << "inserisci una parola: ";
  9.         cin >> a; // metto la parola in input all' array di char se vuoi usare pure gli spazi devi usare cin.getline()
  10.         vector <char> v; // creo un vettore di char
  11.         for(int x = 0; a[x]!='\0'; x++) v.push_back(a[x]); // continuo ad aggiungere le lettere dell' array al vettore
  12. //      stampo tutte le lettere (per far vedere che ha funzionato)
  13.         cout << endl << endl;
  14.         for(int x=0;x<v.size();x++) cout << "v[" << x << "]" << "\t" << v[x] << endl;
  15.         system("pause>nul");   
  16. return 0;
  17. }




Più che array di caratteri non sarebbe meglio utilizzare un string(come richiesta dallo starter del topic)?


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
PM Quote
Avatar
steve__92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 0:29
Venerdì, 21/08/2009
Testo quotato

Postato originariamente da manvb.net:
Più che array di caratteri non sarebbe meglio utilizzare un string(come richiesta dallo starter del topic)?



ottimo! non sapevo che gli string si potessero trattare come fossero array... grazie per la dritta! mi sarà sicuramente utile in futuro.


il codice di esempio diventa così:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.         string a; // gli string si possono usare come fossero array
  9.         cout << "inserisci una parola: ";
  10.         cin >> a; // metto la parola in input all' array di char se vuoi usare pure gli spazi devi usare cin.getline()
  11.         vector <char> v; // creo un vettore di char
  12.         for(int x = 0; a[x]!='\0'; x++) v.push_back(a[x]); // continuo ad aggiungere le lettere dell' array al vettore (finche trovo '\0')
  13. //      stampo tutte le lettere (per far vedere che ha funzionato)
  14.         cout << endl << endl;
  15.         for(int x=0;x<v.size();x++) cout << "v[" << x << "]" << "\t" << v[x] << endl;
  16.         system("pause>nul"); // <-- da aggiungere se non lo vuoi far partire da prompt e usi windows
  17.         return 0;
  18. }


Ultima modifica effettuata da steve__92 il 21/08/2009 alle 0:30
PM Quote
Avatar
tommyprojects (Normal User)
Rookie


Messaggi: 29
Iscritto: 26/07/2009

Segnala al moderatore
Postato alle 16:35
Domenica, 23/08/2009
scusate il ritardo nella risposta ma ho avuto da fare e mi sono otuto ricollegare solo adesso con una penna adsl dalla campagna :)
dunque per tornare a noi...grazie innanzi tutto per tutti gli apporti e poi... l'ultimo cod funzia alla grande solo che a me servirebbe unificare in un unico elemento (numero) i due elementi separati che ne risultano...

cerco di spiegarmi meglio...

se ho una stringa... 11,12,13,14,15,16,17,18,19,20 l'ultimo cod postato mi crea regolarmente:

vec[0]=1
vec[1]=1
vec[2]=,
vec[3=1
vec[4]=2
vec[5]=,
ecc...

mentre a me servirebbe ottenere:

vec[0]=11
vec[1]=12
ecc...

altrimenit il confronto tra numeri successivo.. mi risulta impossibile...

Grazie comunque e rimango in ascolto...

Io per adesso avrei provato così...

Codice sorgente - presumibilmente Delphi

  1. for(int x = 0; vec[z][x]!='\0'; x++)    vv.push_back(vec[z][x]); // continuo ad aggiungere le lettere dell' array al vettore (finche trovo '\0')
  2. //    stampo tutte le lettere (per far vedere che ha funzionato)
  3.     cout << endl << endl;
  4.     for(int x=0;x<vv.size();x++) cout << "v[" << x << "]" << "\t" << vv[x] << endl;
  5.     system("pause>nul"); //    <-- da aggiungere se non lo vuoi far partire da prompt e usi windows
  6.     //return 0;
  7.    
  8.   //prova unione caratteri 2 a 2 ...
  9. char elem1[50], elem2[50];
  10. string una=vec[z][x];
  11. string due=vec[z+1][x];
  12. strcpy(elem1, una);
  13. strcpy(elem2, due);
  14. str uniti = strcat(elem1, elem2);
  15.  
  16. cout << "Si sono uniti?\n";
  17. cout << uniti;
  18. cout << "\n";



ma mi da sempre questo errore:


138 C:\Documents and Settings\tommy\versione32-d.cpp name lookup of `x' changed for new ISO `for' scoping :om:



:)

Ultima modifica effettuata da tommyprojects il 23/08/2009 alle 17:11


Vero sapiente è colui che sa di non sapere [Socrate]
PM Quote