मुझे पता है कि std::cout
C ++ के बराबर है printf
।
C ++ किसके समकक्ष है sprintf
?
मुझे पता है कि std::cout
C ++ के बराबर है printf
।
C ++ किसके समकक्ष है sprintf
?
जवाबों:
उदाहरण:
#include <iostream>
#include <sstream> // for ostringstream
#include <string>
int main()
{
std::string name = "nemo";
int age = 1000;
std::ostringstream out;
out << "name: " << name << ", age: " << age;
std::cout << out.str() << '\n';
return 0;
}
आउटपुट:
name: nemo, age: 1000
sprintf (...)
? आप डेटा को मनमाने ढंग से प्रारूपित नहीं कर सकते, आपको उस प्रकार पर भरोसा करना होगा जब आप इसे <<
ऑपरेटर के उपयोग से स्ट्रीम में फीड करते हैं ।
अपडेट, अगस्त 2019:
ऐसा लगता है कि C ++ 20 होगा std::format
। संदर्भ कार्यान्वयन {fmt} है । यदि आप printf()
अभी एक विकल्प की तलाश कर रहे हैं, तो यह नया "मानक" दृष्टिकोण बन जाएगा और विचार करने योग्य है।
मूल:
Boost.Format का उपयोग करें । इसमें समान printf
-प्रकार के सिंटैक्स, प्रकार की सुरक्षा, std::string
परिणाम और बहुत सारे अन्य निफ्टी सामान हैं। तुम वापस नहीं जाओगे।
स्प्रिंटफ C ++ में ठीक काम करता है।
आउटपुट स्ट्रीम को फॉर्मेट करने के लिए आप iomanip हेडर फाइल का उपयोग कर सकते हैं। यह जांचें !
यहां सी ++ स्प्रिंटफ के लिए एक अच्छा कार्य है। यदि आप उन्हें बहुत अधिक उपयोग करते हैं तो धाराएँ बदसूरत हो सकती हैं।
std::string string_format(const std::string &fmt, ...) {
int size=100;
std::string str;
va_list ap;
while (1) {
str.resize(size);
va_start(ap, fmt);
int n = vsnprintf(&str[0], size, fmt.c_str(), ap);
va_end(ap);
if (n > -1 && n < size) {
str.resize(n); // Make sure there are no trailing zero char
return str;
}
if (n > -1)
size = n + 1;
else
size *= 2;
}
}
C ++ 11 और बाद में, std :: string को सन्निहित भंडारण का उपयोग करने की गारंटी दी जाती है '\0'
, जो कि समाप्त होती है , इसलिए इसे char *
उपयोग करने के लिए डालना कानूनी है &str[0]
।
यह बताया गया है कि वैरिएड तर्कों को पास-बाय-रेफरेंस का पालन नहीं किया जाता है, और c ++ स्ट्रिंग्स की नकल न करने के बारे में अच्छा है यदि इसे नहीं करना है। उस स्थिति में, यह इसे ठीक करता है।
std::string string_format(std::string fmt, ...) {
sprintf
।
(char*) str.c_str()
दूर const
।
क्या आप वास्तव में sprintf()
आईएनजी पर योजना के आधार पर std::to_string()
अन्य विकल्पों की तुलना में उपयोगी और अधिक मुहावरेदार हो सकते हैं:
void say(const std::string& message) {
// ...
}
int main() {
say(std::to_string(5));
say("Which is to say " + std::to_string(5) + " words");
}
std::to_string()
IMHO का मुख्य लाभ यह है कि इसे अतिरिक्त प्रकारों का समर्थन करने के लिए आसानी से बढ़ाया जा सकता है, जो sprintf()
स्ट्रिंग के प्रकार का सपना भी नहीं देख सकता है - जैसे जावा की Object.toString()
विधि।