そんなこと知ってる std::cout
はprintf
と同等のC++です。
sprintf
と同等のC++とは何ですか?
例:
#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
更新、2019年8月:
C++ 20には_std::format
_が含まれるようです。リファレンス実装は {fmt} です。 printf()
の代替を探している場合、これは新しい「標準」アプローチになり、検討する価値があります。
元の:
Boost.Format を使用します。 printf
に似た構文、型の安全性、_std::string
_の結果、その他多くの気の利いたものがあります。あなたは戻りません。
sprintf はC++で正常に動作します。
Iomanipヘッダーファイルを使用して、出力ストリームをフォーマットできます。チェック this !
以下は、c ++ sprintfのNice関数です。過度に使用すると、ストリームがStreamくなります。
std::string string_format(const std::string &fmt, ...) {
int n, 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)
return str;
if (n > -1)
size = n + 1;
else
size *= 2;
}
}
C++ 11以降では、std :: stringは'\0'
で終わる連続ストレージを使用することが保証されているため、char *
を使用して&str[0]
にキャストすることは正当です。
同じ効果を達成するために、文字列ストリームを使用します。また、<cstdio>
と引き続きsnprintfを使用します。
sprintf()
ingで正確に計画している内容に応じて、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()
が文字列化を夢見ることさえできない追加の型をサポートするために簡単に拡張できることです-JavaのObject.toString()
方法。