sstream

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

Η 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 - third edition). C++ Primer. Massachusetts: Addison-Wesley. σελ. 1109-1112. ISBN 0-201-82470-1. 
  3. «<sstream> Members». Microsoft MSDN. http://msdn.microsoft.com/en-us/library/5e52z6w7.aspx. Ανακτήθηκε στις 2011-09-29. 
  4. «stringstream::str». Ιστοσελίδα cplusplus.com. http://www.cplusplus.com/reference/iostream/stringstream/str/. Ανακτήθηκε στις 2011-09-29. 
  5. Stanley B. Lippman, Josee Lajoie (1999 - third edition). C++ Primer. Massachusetts: Addison-Wesley. σελ. 1109-1110. ISBN 0-201-82470-1. 

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