Η sstream είναι μια πρότυπη βιβλιοθήκη της C++ η οποία ορίζει ροές αλφαριθμητικών δεδομένων στην μνήμη. Η βιβλιοθήκη αυτή διαβάζει χαρακτήρες από ένα αντικείμενο αλφαριθμητικών δεδομένων (string object) και δημιουργεί μα ροή αλφαριθμητικών μέσα στην μνήμη όπου ο προγραμματιστής μπορεί να διαβάσει και να γράψει αλφαριθμητικά. Για να χρησιμοποιήσει ο προγραμματιστής την βιβλιοθήκη αυτή θα πρέπει να βάλει το αρχείο επικεφαλίδας <sstream> μέσα στο κώδικα. [1] [2].
| Όνομα |
Περιγραφή |
istringstream |
Ροή εισόδου δεδομένων χαρακτήρων τύπου char. |
ostringstream |
Ροή εξόδου δεδομένων χαρακτήρων τύπου char. |
stringbuf |
Εσωτερική προσωρινή μνήμη (buffer) της ροής δεδομένων τύπου char. |
stringstream |
Ροή εισόδου/εξόδου δεδομένων χαρακτήρων τύπου char. |
wistringstream |
Ροή εισόδου δεδομένων χαρακτήρων τύπου wchar_t. |
wostringstream |
Ροή εξόδου δεδομένων χαρακτήρων τύπου wchar_t. |
wstringbuf |
Εσωτερική προσωρινή μνήμη (buffer) της ροής δεδομένων τύπου wchar_t. |
wstringstream |
Ροή εισόδου/εξόδου δεδομένων χαρακτήρων τύπου wchar_t. |
| Όνομα |
Περιγραφή |
str |
Επιστρέφει σε ένα αντικείμενο αλφαριθμητικού τύπου stl::string από τη ροή δεδομένων τα περιεχόμενα της εσωτερικής προσωρινής μνήμης τύπου stringbuf (string str() const;). Η ίδια μέθοδος με παράμετρο ένα αλφαριθμητικό τύπου stl::string αντιγράφει τα περιεχόμενα μέσα στο stringbuf (void str (const string & s);). [4] |
| Όνομα |
Περιγραφή |
swap |
Ανταλλάσσει τα δεδομένα μεταξύ δύο διαφορετικών αντικειμένων τύπου ροής δεδομένων (στην C++11). |
| Όνομα |
Περιγραφή |
basic_stringbuf |
Κλάση-αντικείμενο ορισμού της ροής εισόδου/εξόδου δεδομένων χαρακτήρων. |
basic_istringstream |
Κλάση-αντικείμενο ορισμού της ροής εισόδου δεδομένων χαρακτήρων. |
basic_ostringstream |
Κλάση-αντικείμενο ορισμού της ροής εξόδου δεδομένων χαρακτήρων. |
basic_stringstream |
Κλάση-αντικείμενο ορισμού της εσωτερικής προσωρινής μνήμης (buffer) της ροής δεδομένων χαρακτήρων. |
Στο παρακάτω πρόγραμμα η συνάρτηση file_to_str διαβάζει το εξωτερικό αρχείο που περνάει με παράμετρο μέσα σε ένα αντικείμενο-κλάση ροής δεδομένων εξόδου τύπου ostringstream. Καλώντας την μέθοδο str() του ostringstream επιστρέφουμε ένα αντικείμενο αλφαριθμητικού τύπου string [5]:
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
string file_to_str(string InFile) {
ifstream In(InFile.c_str());
if (!In) {
string error_str("Δεν μπορώ να διαβάσω το ");
return error_str+InFile;
}
ostringstream buf;
char ch;
while (buf && In.get(ch))
buf.put(ch);
return buf.str();
}
int main() {
cout << "Το εξωτερικό αρχείο in.txt περιέχει: "
<< endl << file_to_str("in.txt");
return 0;
}
Ένα αντικείμενο τύπου ostringstream μπορεί να χρησιμοποιηθεί για την αυτόματη μορφοποίηση ενός αλφαριθμητικού string. Στο παρακάτω παράδειγμα διαφορετικοί τύποι δεδομένων μορφοποιούνται σε ένα αλφαριθμητικό.
#include <iostream>
#include <sstream>
using namespace std;
int main() {
int ival=145; int *ptr_ival= &ival;
double dval = 6.433343; double *ptr_dval = &dval;
// Η ροή εξόδου δεδομένων η οποία θα γίνει η μορφοποίηση
ostringstream format_message;
format_message << "ival: " << ival
<< " με διεύθυνση: " << ptr_ival
<< " dval: " << dval
<< " με διεύθυνση: " << ptr_dval
<< endl;
string msg=format_message.str();
// Η έξοδος είναι παρόμοια με το παρακάτω αλφαριθμητικό (η διευθύνσεις μπορεί να διαφέρουν):
// ival: 145 με διεύθυνση: 0012FF50 dval: 6.43334 με διεύθυνση: 0012FF34
cout << msg;
return 1;
}
Ένα αντικείμενο ροής δεδομένων χαρακτήρων (string stream) μπορεί να χρησιμοποιηθεί για μετατροπή ενός τύπου αλφαριθμητικού το οποίος περιέχει ένα αριθμό σε ένα αριθμητικό τύπο δεδομένων [2].
#include <sstream>
using namespace std;
int main() {
// ροή δεδομένων χαρακτήρων εισόδου/εξόδου
stringstream ss;
string str="123 13.53";
// στείλε το αλφαριθμητικό str μέσα στη ροή δεδομένων
ss << str;
int i;
float f;
// μετατρέπει τους δύο αριθμούς ο οποίοι βρίσκονται μέσα στη ροή δεδομένων
// στη μεταβλητή i (τύπου ακέραιου) και στη μεταβλητή f (τύπου δεκαδικού)
ss >> i >> f;
return 0;
}
Εξωτερικοί σύνδεσμοι [Επεξεργασία]