Giriş
Şu satırı dahil ederiz.
Constructor - Default
ostream'e çevrilebilir. Şöyle yaparız.
Şöyle yaparız. Bu durumda ostringstream ile aynı işlevi görür. Binary veri yazma için kullanılır.
İmzası şöyle.
Bu constructor okuma işlemi için kullanılır.
String'e Yazma işlemi - Genelde Bayrak Kullanılır
Bayraklar in ve out oldukları için yazma işlemi verilen belleğin başından başlar.
Constructor - rvalue
Şu anda böyle bir constructor yok. Ancak gelirse imzası şöyle olur.
Copy Constructor
Açıklaması şöyle
Hata bayraklarını temizler. Şöyle yaparız.
Şöyle yaparız.
stringstream sınıfı için özel bir << operator metodu yoktur.
read metodu
Şöyle yaparız.
Şöyle yaparız.
Yazma konumunu ayarlar. Son karakteri silip başka bir şey yazmak için şöyle yaparız.
stream içindeki karakterleri std::string olarak verir.
stringstream'i temizleme için str("") metodu çağırılır. clear() metodu ise strem içindeki flag ve kapasiteyi temizler. Şöyle yaparız.
Şu satırı dahil ederiz.
#include <sstream>
Bu sınıf aslında bir typedef. Şöyle tanımlı.typedef basic_stringstream<char> stringstream;
char yerine başka bir tip ile çalışsın istersek şöyle yaparız.typedef std::basic_stringstream<char32_t> u32sstream;
stringstream hem bir ostream hem de istream nesnesidir.Constructor - Default
ostream'e çevrilebilir. Şöyle yaparız.
void log(ostream& o) {
stringstream* s = dynamic_cast<stringstream*>(&o);
if (s) {
cout << s->str() << endl;
}
}
int main() {
int x = 5, y = 6;
log(stringstream() << "x=" << x << ", y=" << y);
return 0;
}
Constructor - FlagsŞöyle yaparız. Bu durumda ostringstream ile aynı işlevi görür. Binary veri yazma için kullanılır.
stringstream ss (ios_base::out|ios_base::binary);
Constructor - l-value Stringİmzası şöyle.
explicit basic_stringstream( const std::basic_string<CharT,Traits,Allocator>& str,
ios_base::openmode mode = ios_base::in|ios_base::out );
String'den Okuma İşlemi - Bayrak KullanılmazBu constructor okuma işlemi için kullanılır.
int main()
{
std::stringstream ss("hello");
std::string s;
ss >> s;
cout << s << endl;
}
s nesnesi hello değerini alır.int main()
{
std::stringstream ss("49");
int x = 0;
ss >> x;
cout << x << endl;
}
x nesnesi 49 değerini alır.String'e Yazma işlemi - Genelde Bayrak Kullanılır
Bayraklar in ve out oldukları için yazma işlemi verilen belleğin başından başlar.
int main() {
std::stringstream ss("hello");
ss << " you";
cout << ss.str() << endl;
}
Çıktı olarak şunu alırız.youoEğer yazma belirtecini sona kaydırırsak
int main() {
std::stringstream ss("hello");
ss.seekp(0, ss.end);
ss << " you!";
cout << ss.str() << endl;
}
Çıktı olarak şunu alırız.hello you!Bunu yapmak yerine aynı şeyi ate bayrağı ile de başarabiliriz.
int main() {
std::stringstream ss("hello", std::ios_base::out | std::ios_base::ate);
ss << " you!";
cout << ss.str() << endl;
}
Çıktı olarak şunu alırız.hello you!
Şu anda böyle bir constructor yok. Ancak gelirse imzası şöyle olur.
explicit basic_ostringstream(
const basic_string<charT, traits, Allocator>&& str,
ios_base::openmode which = ios_base::out,
const Allocator& a = Allocator());
Copy Constructor
Açıklaması şöyle
std::stringstream does not have a copy constructor.clear metodu
Hata bayraklarını temizler. Şöyle yaparız.
stringstream ss;
...
ss.clear(); //clear stream
exceptions metoduŞöyle yaparız.
std::stringstream ss;
ss.exceptions(std::ios_base::eofbit | std::ios_base::badbit | std::ios_base::failbit);
operator <<stringstream sınıfı için özel bir << operator metodu yoktur.
read metodu
Şöyle yaparız.
std::vector<char> v = ...;
ss.read(&v[0], v.size());
rdbuf metoduŞöyle yaparız.
#include <iostream>
#include <sstream>
int main() {
string work;
int var1, var2;
cin >> work.rdbuf(); // Fill from stdin
stringstream(work) >> var1 >> var2; // Parses as expected.
cout << var1 << ' ' << var2 << endl;
return 0;
}
seekp metoduYazma konumunu ayarlar. Son karakteri silip başka bir şey yazmak için şöyle yaparız.
std::stringstream str;
str << "["
str.seekp(-1, str.cur); // this is to replace the last character
str<< "]";
str metodustream içindeki karakterleri std::string olarak verir.
stringstream ss ;
s << "my string" ;
cout << ss.str() << endl ;
str() metodunun döndürdüğü std::string geçici bir nesnedir. Dolayısıyla aşağıdaki kod dangling pointer hatası yapılmasına sebep olur.ostringstream o;
o << "some string";
const char* s = o.str().c_str();
str metodu - temizlemestringstream'i temizleme için str("") metodu çağırılır. clear() metodu ise strem içindeki flag ve kapasiteyi temizler. Şöyle yaparız.
stringstream ss;
s.str ("");
ss.clear();
str metodu
Şu anda böyle bir metod yok. Ancak gelirse imzası şöyle olur.
Şöyle yaparız.
getline ile kullanımı
Tüm satırı okuduktan sonra başka bir nümerik tipe çevirmek için kullanılabilir.
Şu anda böyle bir metod yok. Ancak gelirse imzası şöyle olur.
template<class SAlloc = Allocator>
void str(basic_string<charT, traits, SAlloc>&& s);
write metoduŞöyle yaparız.
std::vector<char> v = ...;
std::stringstream ss;
ss.write(buffer.data(), buffer.size());
Diğergetline ile kullanımı
Tüm satırı okuduktan sonra başka bir nümerik tipe çevirmek için kullanılabilir.
string mystr;
float price=0;
int quantity=0;
cout << "Enter price: ";
getline (cin,mystr);
stringstream(mystr) >> price;
cout << "Enter quantity: ";
getline (cin,mystr);
stringstream(mystr) >> quantity;
Hiç yorum yok:
Yorum Gönder