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

Μέλη [3] Επεξεργασία

Ορισμοί Τύπων Επεξεργασία

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

Παραπομπές Επεξεργασία

  1. ISO/IEC 14882:2003 Programming Languages — C++. [lib.string.streams]/1
  2. 2,0 2,1 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. 

Εξωτερικοί σύνδεσμοι Επεξεργασία