Newsgroup: it.comp.lang.c++
Titolo: fare a pezzi le stringhe

Ieri ho affrontato un problema che necessitava di dividere una stringa in
parole, riconoscendo, tra l'altro, la parola finale (nel mio caso stop)...
in pratica diaciamo che c'è una stringa fatta così:
  due tre cinque stop
e io devo leggerla finchè non incontro stop, far riconoscere al pc il numero
e farlo venir fuori output come 235
(in realtà il mio problema era un po' più vasto, ma questo è il punto su cui
ho molte difficoltà)
Un'altra cosa: perchè non si può dichiarare una cosa del genere?
  string c[SIZE][SIZE]
(o sono io che non sono capace?)
mi farebbe proprio comodo una bella griglia di stringhe c++.....magari c'è
un' altro modo per dichiarare una struttura del genere....help!
L'esame è sempre più vicino.
Grazie.

 string c[SIZE][SIZE]
e' possibilissimo, forse stai sbagliando in quacosaltro (hai messo std:: 
???)
Comunqe supponendo che si trattasse effettivamente di STRING instile c++, 
spero che il seguente esempio ti sia di aiuto, l'ho buttato li' come vi 
veniva, forse ci sono modi migliori
#include <iostream>
 #include <map>
 #include <string>
 #include <sstream>
 int main()
 {
   using namespace std;
   map<std::string, int> strNumeri;
   strNumeri["zero"] = 0;
   strNumeri["uno"] = 1;
   strNumeri["due"] = 2;
   strNumeri["tre"] = 3;
   strNumeri["quattro"] = 4;
   strNumeri["cinque"] = 5;
   strNumeri["sei"] = 6;
   strNumeri["sette"] = 7;
   strNumeri["otto"] = 8;
   strNumeri["nove"] = 9;
   string dati = "due tre nove cinque stop bla bla bla";
   // si prendono solo i dati fino allo stop...
   string datiUtili = dati.substr(0, dati.find("stop"));
   std::cout << datiUtili << std::endl;
   // si suddivide la stringa in singole parti separate dallo spazio...
   stringstream sstr(datiUtili);
   string buff;
   while(getline(sstr, buff, ' '))
      cout << strNumeri[buff]; // uso del MAP per convertire le stringhe in 
interi
   string mia[10][10];
   mia[5][3] = "pippus";   cout << endl << mia[5][3] << endl;
   system("PAUSE");	
   return 0;
}
--------------OUTPUT
due tre nove cinque
2395
pippus
Premere un tasto per continuare...
------------------------------------------------------------
Ciao, Checco.

 parole,
 
http://www.boost.org/libs/tokenizer/index.htm
Max

dawide wrote:

vi e' una libreria chiamata tokenizer che serve appunto a dividere una
sequenza di caratteri o stringhe in token, la puoi trovare su:
http://www.boost.org/libs/libraries.htm#String
altrimenti puoi costruire tu delle funzioni a partire a mio avviso dagli
algoritmi delle STL e relativi contenitori.
forse se ci fai qualche esempio possiamo esserti piu' utili.
 

    map<std::string, int> strNumeri;    //non so cosa voglia dire questa
riga

io mi scuso per la mia ignoranza ma purtroppo il corso č tenuto male e io mi
sono dovuto arrangiare con quello che avevo...se potessi darmi un esempio
piů orientato al C, cioč senza usare string ma solo char[] te ne sarei
grato.

 grato.
Mi dispiace ma sono un po arrugginito in C, più imparo C++ e meno ricordo 
il C.
Comunque se non ricordo male c'è una funzione di libreria che divide in 
token...
strtok()
qualcosa del genere dovrebbe funzionare:
int main()
{
     char prova[80] = "uno due quattro stop bla bla bla";
     char* pezzo;
     pezzo = strtok(prova, " ");
     while(pezzo != NULL)
     {
          std::cout << pezzo << std::endl;
          pezzo = strtok(NULL, " ");
     }
   system("PAUSE");	
   return 0;
}
------OUTPUT
uno
due
quattro
stop
bla
bla
bla
Premere un tasto per continuare...
---------------
Bhe! il resto dovresti saperlo fare, basta qualche IF ...ELSE...
Ciao, Checco.

 Ciao, Checco.
Mitico!! Grazie Mille!