Question Comment concaténer un std :: string et un int?


Je pensais que ce serait très simple, mais cela présente quelques difficultés. Si j'ai

std::string name = "John";
int age = 21;

Comment puis-je les combiner pour obtenir une seule chaîne "John21"?


562
2017-10-10 15:05


origine


Réponses:


Par ordre alphabétique:

std::string name = "John";
int age = 21;
std::string result;

// 1. with Boost
result = name + boost::lexical_cast<std::string>(age);

// 2. with C++11
result = name + std::to_string(age);

// 3. with FastFormat.Format
fastformat::fmt(result, "{0}{1}", name, age);

// 4. with FastFormat.Write (requires #include <sstream>)
fastformat::write(result, name, age);

// 5. with the {fmt} library
result = fmt::format("{}{}", name, age);

// 6. with IOStreams
std::stringstream sstm;
sstm << name << age;
result = sstm.str();

// 7. with itoa
char numstr[21]; // enough to hold all numbers up to 64-bits
result = name + itoa(age, numstr, 10);

// 8. with sprintf
char numstr[21]; // enough to hold all numbers up to 64-bits
sprintf(numstr, "%d", age);
result = name + numstr;

// 9. with STLSoft's integer_to_string
char numstr[21]; // enough to hold all numbers up to 64-bits
result = name + stlsoft::integer_to_string(numstr, 21, age);

// 10. with STLSoft's winstl::int_to_string()
result = name + winstl::int_to_string(age);

// 11. With Poco NumberFormatter
result = name + Poco::NumberFormatter().format(age);
  1. est sûr, mais lent; a besoin Renforcer (en-tête seulement) la plupart / toutes les plates-formes
  2. est sûr, nécessite C ++ 11 (to_string () est déjà inclus dans #include <string>)
  3. est sûr et rapide; a besoin FastFormat, qui doit être compilé la plupart / toutes les plates-formes
  4. est sûr et rapide; a besoin FastFormat, qui doit être compilé la plupart / toutes les plates-formes
  5. est sûr et rapide; a besoin la bibliothèque {fmt}, qui peut soit être compilé ou utilisé dans un mode en-tête seulement; la plupart / toutes les plates-formes
  6. sûr, lent et verbeux; a besoin #include <sstream> (à partir de C ++ standard)
  7. est fragile (vous devez fournir un tampon suffisamment grand), rapide et verbeux; itoa () est une extension non standard, et n'est pas garantie d'être disponible pour toutes les plateformes
  8. est fragile (vous devez fournir un tampon suffisamment grand), rapide et verbeux; ne nécessite rien (est C ++ standard); toutes les plateformes
  9. est cassant (vous devez fournir un tampon suffisamment grand), probablement la conversion la plus rapide possible, verbeux; a besoin STLSoft (en-tête seulement) la plupart / toutes les plates-formes
  10. safe-ish (vous n'utilisez pas plus d'un int_to_string () appeler dans une seule déclaration), rapide; a besoin STLSoft (en-tête seulement) Windows seulement
  11. est sûr, mais lent; a besoin Poco C ++ ; la plupart / toutes les plates-formes

947
2018-05-22 21:16



En C ++ 11, vous pouvez utiliser std::to_string, par exemple.:

auto result = name + std::to_string( age );

234
2017-08-08 08:17



Si vous avez Boost, vous pouvez convertir l'entier en une chaîne en utilisant boost::lexical_cast<std::string>(age).

Une autre méthode consiste à utiliser des chaînes de caractères:

std::stringstream ss;
ss << age;
std::cout << name << ss.str() << std::endl;

Une troisième approche consisterait à utiliser sprintf ou snprintf de la bibliothèque C.

char buffer[128];
snprintf(buffer, sizeof(buffer), "%s%d", name.c_str(), age);
std::cout << buffer << std::endl;

D'autres affiches ont suggéré d'utiliser itoa. Ce n'est pas une fonction standard, donc votre code ne sera pas portable si vous l'utilisez. Il y a des compilateurs qui ne le supportent pas.


81
2017-10-10 15:11



std::ostringstream o;
o << name << age;
std::cout << o.str();

71
2017-10-10 15:09



#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string itos(int i) // convert int to string
{
    stringstream s;
    s << i;
    return s.str();
}

Volé sans vergogne http://www.research.att.com/~bs/bs_faq2.html.


47
2017-10-10 15:09



C'est la manière la plus simple:

string s = name + std::to_string(age);

26
2017-12-21 21:50



Il me semble que la réponse la plus simple est d'utiliser le sprintf fonction:

sprintf(outString,"%s%d",name,age);

19
2017-10-10 15:56