Zaten birkaç şey denedim,
std::stringstream m;
m.empty();
m.clear();
ikisi de çalışmıyor.
Zaten birkaç şey denedim,
std::stringstream m;
m.empty();
m.clear();
ikisi de çalışmıyor.
Yanıtlar:
Tüm standart kitaplık türleri için üye işlevi empty()
bir komut değil sorgudur, yani "boş musunuz?" "lütfen içeriklerinizi atın".
clear()
Üye işlevi miras ios
ve bir dosya akışı için hata durumu grubu varsa, örneğin akımı, hata durumunu temizlemek için kullanılır eofbit
(sonu dosyası), o zaman çağrı clear()
için hata durumu geri koyacaktır goodbit
(herhangi bir hata) .
A'nın içeriğini temizlemek için stringstream
şunları kullanarak:
m.str("");
aşağıdakileri kullanırken doğru:
m.str(std::string());
Eğer yürütmesini kaçının, çünkü teknik olarak daha verimlidir std::string
alan kurucuya const char*
. Ama bu gün herhangi bir derleyici her iki durumda da aynı kodu üretmek mümkün olmalıdır - bu yüzden sadece daha okunabilir ne ile gitmek istiyorum.
Hata durumunu temizleyebilir ve dize akışını tek bir satırda boşaltabilirsiniz
std::stringstream().swap(m); // swap m with a default constructed stringstream
Bu, m'yi varsayılan yapılandırılmış duruma etkin bir şekilde sıfırlar
Bu, derleyiciden bağımsız olarak en güvenilir yol olmalıdır:
m=std::stringstream();
mm.clear(); mm.str("");
için hile yaptı. (C ++ 11 yok, takas daha iyi olurdu).
swap
hareket atamasından daha iyi olur?
benim 2 sent:
Bu benim için xcode ve dev-c ++ gibi görünüyordu, ben bir kullanıcının isteğine göre tekrar tekrar yürütülürse kod ilk kez Tamam çalışacak bir dize akışı değişkeni dolduracak bir menü şeklinde bir program vardı çalıştırır, ancak kullanıcı aynı kodu bir daha çalıştırdığında dize akışını temizlemez. ancak aşağıdaki iki kod satırı, string değişkenini doldurmadan önce stringstream değişkenini her seferinde temizledi. (2 saatlik deneme yanılma ve google aramaları), btw, her satırı kendi başına kullanmak hile yapmaz.
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
Bu kavramsal bir problem.
Stringstream bir akıştır, bu nedenle yineleyicileri ileridir, geri dönemez. Bir çıkış dizesi akışında, diğer çıkış akışlarında olduğu gibi yeniden başlatmak için bir floş () öğesine ihtiyacınız vardır.
Bunlar gnu c ++ dize akışındaki verileri atmaz
m.str("");
m.str() = "";
m.str(std::string());
Aşağıdakiler benim için stringstream'i boşaltıyor:
m.str().clear();