| C++ Πρότυπη βιβλιοθήκη |
| --- |
| * `fstream`
* `iomanip`
* `ios`
* `iostream`
* `sstream`
 |
| Τυπική Βιβλιοθήκη Προτύπων (STL) |
| * `algorithm`
* `bitset`
* `deque`
* `functional`
* `iterator`
* `list`
* `map`
* `set`
* `stack`
* `queue`
* `vector`
 |
| 
C++11 |
| * `array`
* `forward\_list`
* `unordered\_map`
* `unordered\_set`
 |
| C Πρότυπη βιβλιοθήκη |
| * `cassert`
* `cctype`
* `cerrno`
* `climits`
* `clocale`
* `cmath`
* `csetjmp`
* `csignal`
* `cstdarg`
* `cstddef`
* `cstdint`
* `cstdio`
* `cstdlib`
* `cstring`
* `ctime`
 |
| π • σ • ε
 |

Η **sstream** είναι μια πρότυπη βιβλιοθήκη της C++ η οποία ορίζει ροές αλφαριθμητικών δεδομένων στην μνήμη. Η βιβλιοθήκη αυτή διαβάζει χαρακτήρες από ένα αντικείμενο αλφαριθμητικών δεδομένων (string object) και δημιουργεί μα ροή αλφαριθμητικών μέσα στην μνήμη όπου ο προγραμματιστής μπορεί να διαβάσει και να γράψει αλφαριθμητικά. Για να χρησιμοποιήσει ο προγραμματιστής την βιβλιοθήκη αυτή θα πρέπει να βάλει το αρχείο επικεφαλίδας `<sstream>` μέσα στο κώδικα..

Μέλη
----

### Ορισμοί Τύπων

| Όνομα | Περιγραφή |
| --- | --- |
| `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);`). |

### Συναρτήσεις

| Όνομα | Περιγραφή |
| --- | --- |
| `swap` | Ανταλλάσσει τα δεδομένα μεταξύ δύο διαφορετικών αντικειμένων τύπου ροής δεδομένων (στην C++11). |

### Κλάσεις

| Όνομα | Περιγραφή |
| --- | --- |
| `basic_stringbuf` | Κλάση-αντικείμενο ορισμού της ροής εισόδου/εξόδου δεδομένων χαρακτήρων. |
| `basic_istringstream` | Κλάση-αντικείμενο ορισμού της ροής εισόδου δεδομένων χαρακτήρων. |
| `basic_ostringstream` | Κλάση-αντικείμενο ορισμού της ροής εξόδου δεδομένων χαρακτήρων. |
| `basic_stringstream` | Κλάση-αντικείμενο ορισμού της εσωτερικής προσωρινής μνήμης (buffer) της ροής δεδομένων χαρακτήρων. |

Παραδείγματα
------------

Στο παρακάτω πρόγραμμα η συνάρτηση `file_to_str` διαβάζει το εξωτερικό αρχείο που περνάει με παράμετρο μέσα σε ένα αντικείμενο-κλάση ροής δεδομένων εξόδου τύπου `ostringstream`. Καλώντας την μέθοδο `str()` του `ostringstream` επιστρέφουμε ένα αντικείμενο αλφαριθμητικού τύπου string :

```
#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) μπορεί να χρησιμοποιηθεί για μετατροπή ενός τύπου αλφαριθμητικού το οποίος περιέχει ένα αριθμό σε ένα αριθμητικό τύπο δεδομένων .

```
#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;
}

```

Παραπομπές
----------

1. ↑  *ISO/IEC 14882:2003 Programming Languages — C++. [lib.string.streams]/1*
2. 1 2  Stanley B. Lippman· Josee Lajoie (1999). *C++ Primer* (3η έκδοση). Massachusetts: Addison-Wesley. σελίδες 1109-1112. ISBN 0-201-82470-1.
3. ↑  «<sstream> Members». Microsoft MSDN. Ανακτήθηκε στις 29 Σεπτεμβρίου 2011.
4. ↑  «stringstream::str». Ιστοσελίδα cplusplus.com. Αρχειοθετήθηκε από το πρωτότυπο στις 23 Σεπτεμβρίου 2011. Ανακτήθηκε στις 29 Σεπτεμβρίου 2011.
5. ↑  Stanley B. Lippman, Josee Lajoie (1999). *C++ Primer* (3η έκδοση). Massachusetts: Addison-Wesley. σελίδες 1109-1110. ISBN 0-201-82470-1.

Εξωτερικοί σύνδεσμοι
--------------------

* C++ reference for `std::stringstream`