====== 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; }