====== String streams ======
Εκτός από τις κλάσεις για ανάγνωση ή εγγραφή από αρχείο ή τα //stdin// και //stdout// η //standard// βιβλιοθήκη της C++ παρέχει κλάσεις για ανάγνωση και εγγραφή από ένα //string//. Οι βασικές κλάσεις είναι οι εξής (παρέχονται αντίστοιχες κλάσεις και για //wstrings//, με τα οποία δεν θα ασχοληθούμε):
* **istringstream:** //stream// για διάβασμα από ένα //string//.
* **ostringstream:** //stream// για γράψιμο σε ένα //string//.
* **stringstream:** //stream// για διάβασμα και γράψιμο σε ένα //string//.
#include
#include
#include
using namespace std;
int main() {
stringstream sstream;
sstream << "Introducing C++ in CE325";
string token;
while( sstream >> token ) {
cout << token << " ";
}
cout << endl;
cout << "Stream contents: " << sstream.str() << endl;
sstream.str("");
cout << "Stream contents after clearing: " << sstream.str() << endl;
}
Παρατηρήστε ότι καθώς διαβάζουμε το //stream// λέξη-λέξη το περιεχόμενο του //stream// παραμένει αμετάβλητο. Μπορείτε να
* Λάβετε το περιεχόμενο ενός //stringstream// χρησιμοποιώντας τη μέθοδο ''sstream.str();'' (χωρίς ορίσματα).
* καθαρίσετε το περιεχόμενο //stringstream// χρησιμοποιώντας τη μέθοδο ''sstream.str("");''.
===== Μετατροπή αριθμών σε strings και αντίστροφα =====
Μπορούμε να χρησιμοποιήσουμε ένα //stringstream// προκειμένου να διαβάσουμε ή να γράψουμε ακέραιους ή αριθμούς κινητής υποδιαστολή από ένα string. Το παρακάτω παράδειγμα είναι αποκαλύπτικό:
#include
#include
#include
using namespace std;
int main() {
char cexpr[256];
double opnd1, opnd2;
char op;
cout << "Enter arithmetic expression: ";
cin.getline(cexpr, 256);
istringstream sstream(cexpr);
sstream >> opnd1 >> op >> opnd2;
double result=0;
switch(op) {
case '+':
result = opnd1 + opnd2;
break;
case '-':
result = opnd1 - opnd2;
break;
case '*':
result = opnd1 * opnd2;
break;
case '/':
result = opnd1 / opnd2;
break;
default:
cout << "ERROR\n";
break;
}
cout << result << endl;
}