User Tools

Site Tools


cpp:stringstreams

String streams

Εκτός από τις κλάσεις για ανάγνωση ή εγγραφή από αρχείο ή τα stdin και stdout η standard βιβλιοθήκη της C++ παρέχει κλάσεις για ανάγνωση και εγγραφή από ένα string. Οι βασικές κλάσεις είναι οι εξής (παρέχονται αντίστοιχες κλάσεις και για wstrings, με τα οποία δεν θα ασχοληθούμε):

  • istringstream: stream για διάβασμα από ένα string.
  • ostringstream: stream για γράψιμο σε ένα string.
  • stringstream: stream για διάβασμα και γράψιμο σε ένα string.
stringstream.cpp
#include <iostream>
#include <sstream>
#include <string>
 
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. Το παρακάτω παράδειγμα είναι αποκαλύπτικό:

stringstream.cpp
#include <iostream>
#include <sstream>
#include <string>
 
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;
}
cpp/stringstreams.txt · Last modified: 2019/05/21 19:49 (external edit)