web-dev-qa-db-ja.com

sprintfのC ++相当?

そんなこと知ってる std::coutprintfと同等のC++です。

sprintfと同等のC++とは何ですか?

70
lital maatuk

std::ostringstream

例:

#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
56
Vijay Mathew

更新、2019年8月:

C++ 20には_std::format_が含まれるようです。リファレンス実装は {fmt} です。 printf()の代替を探している場合、これは新しい「標準」アプローチになり、検討する価値があります。

元の:

Boost.Format を使用します。 printfに似た構文、型の安全性、_std::string_の結果、その他多くの気の利いたものがあります。あなたは戻りません。

24
janm

sprintf はC++で正常に動作します。

16
Steve Rowe

Iomanipヘッダーファイルを使用して、出力ストリームをフォーマットできます。チェック this

7
vinkris

以下は、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]にキャストすることは正当です。

5
Erik Aronesty

同じ効果を達成するために、文字列ストリームを使用します。また、<cstdio>と引き続きsnprintfを使用します。

0
regality

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() 方法。

0
Guss