[C++] La classe basic_string: minitutorial
Introduzione
Nel mio progetto di tesi,faccio uso di stringhe di caratteri per l'invio di comandi e il confronto fra stringhe.
Venendo dal mondo Java,ho fatto un po' di fatica ad orientarmi su come vengono trattate le stringhe in C++ (con particolare considerazione all'ambiente Visual Studio).
A seguire alcune considerazioni sulla classe basic_string.
Sprazzi di codice
Quanto segue è la creazione di una stringa e il confronto fra stringhe, prendendo in input una stringa digitata dall'utente. Il confronto viene fatto sia tramite l'operatore "==" sia tramite compare che ritorna 0 se le stringhe sono uguali:
string myString("partenza");Osserviamo ora il seguente confronto:
string passwd;
cout << "Stringa: \"" << myString << "\"" << endl;
cout << "Lunghezza stringa: " << myString.length() << endl;
cout << "Scrivi una stringa: ";
getline(cin, passwd, '\n');
if(passwd == "partenza") {
cout << "Usato \"=\": OK" << endl;
}
if(passwd.compare(myString) == 0){
cout << "Usato \"compare\": OK" << endl;
}
string newString("getttnversion\r\n");Le stringhe risultano diverse! Per ragioni di esigenza,quando passo una stringa di caratteri dal client in java,la faccio terminare con un "\n",pensando che recv interpreti la cosa come la fine del messaggio (anche se non ho ben capito su che basi recv determini che il client ha smesso di inoltrare dati...).
string another("getttnversion");
cout << "Confronto fra stringhe con caratteri di escape: " << endl;
cout << " - ";
if(newString.compare(another) == 0)
cout << "Risultano uguali\n" << endl;
else cout << "Risultano diverse\n" << endl; // risulteranno diverse!
Segue quindi una funzione "purificatrice" per le stringhe: rimuovo gli spazi,i carriage return e i line feed:
void cleanString(string *aString) {In questo modo anotherString verrà ripulita di spazi e dai caratteri '\r' e '\n'. Se qualcuno sa spiegarmi nel dettaglio:
for(size_t i = aString->find(" ", 0); i != aString->npos; i = aString->find(" ", i)){
aString->erase(i,1);
}
for(size_t i = aString->find("\n", 0); i != aString->npos; i = aString->find("\n", i)){
aString->erase(i,1);
}
for(size_t i = aString->find("\r", 0); i != aString->npos; i = aString->find("\r", i)){
aString->erase(i,1);
}
}
// come si usa...
cleanString(&anotherString);
- come fa recv a determinare la fine dei dati spediti;
- se aspetta all'infinito oppure scade dopo un timeout;
15:32
|
Categorie:
c++,
unversità,
Visual Studio
|
This entry was posted on 15:32
and is filed under
c++
,
unversità
,
Visual Studio
.
You can follow any responses to this entry through
the RSS 2.0 feed.
You can leave a response,
or trackback from your own site.
0 comments:
Posta un commento