C++ équivalent de sprintf?

Je sais que std::cout est L'équivalent C++ de printf.

Quel est l'équivalent C++ de sprintf?

56
demandé sur Smi 2011-02-13 10:50:54

6 réponses

std::ostringstream

Exemple:

#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;
}

Sortie:

name: nemo, age: 1000
49
répondu Vijay Mathew 2013-08-28 14:44:28

Utiliser Coup De Pouce.Format . Il a printf - comme la syntaxe, la sécurité de type, std::string Résultats, et beaucoup d'autres trucs astucieux. Vous ne serez pas revenir en arrière.

22
répondu janm 2013-03-18 07:48:45

Sprintf fonctionne très bien en C++.

14
répondu Steve Rowe 2011-12-01 19:58:03

Vous pouvez utiliser le fichier d'en-tête iomanip pour formater le flux de sortie. Vérifiez CE !

7
répondu vinkris 2017-05-23 12:34:23

Voici une bonne fonction pour un sprintf c++. Les flux peuvent devenir moche si vous les utilisez trop.

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;
    }
}

En C++11 et versions ultérieures, std:: string est garanti pour utiliser un stockage contigu qui se termine par '\0', Il est donc légal de le convertir en char * en utilisant &str[0].

4
répondu Erik Aronesty 2015-12-28 11:22:52

Utilisez un stringstream pour obtenir le même effet. En outre, vous pouvez inclure <cstdio> et toujours utiliser snprintf.

1
répondu regality 2017-05-25 01:30:07