在C+中格式化长度未知的字符串+; 我目前正在学习C++,我无法找到如何创建一个字符串,它使用一个格式化程序来使用多个参数,例如使用Simultf,但是对于一个未知的字符串长度。p>

在C+中格式化长度未知的字符串+; 我目前正在学习C++,我无法找到如何创建一个字符串,它使用一个格式化程序来使用多个参数,例如使用Simultf,但是对于一个未知的字符串长度。p>,c++,string,C++,String,我想做的是 string myString = string.format("Hello, here is %s %s and another %s", par1, par2, par3); 我知道在C中有AsPrTFF函数,它可以计算出字符串的长度,它是Maloc的内存,当完成后,你需要释放它,但是,尽管SCAFTF是这样的,但是对于C++来说,这似乎是不可用的。我在谷歌上看到的关于asprintf的一切似乎都集中在Linux上,而我需要跨平台 我看到的关于C++和字符串格式的所有东西都需要

我想做的是

string myString = string.format("Hello, here is %s %s and another %s", par1, par2, par3);

我知道在C中有AsPrTFF函数,它可以计算出字符串的长度,它是Maloc的内存,当完成后,你需要释放它,但是,尽管SCAFTF是这样的,但是对于C++来说,这似乎是不可用的。我在谷歌上看到的关于asprintf的一切似乎都集中在Linux上,而我需要跨平台


<>我看到的关于C++和字符串格式的所有东西都需要定义一个固定长度的字符数组,使用SpRATF,但是我不知道字符串的长度,所以我不能这样做。P> > Po>由Juuttess获得标准C++库。它将为您提供完整的字符串接口以及更多。你似乎在思考C,而不是C++。当然,您可以使用sprintf()之类的C接口来加载 char [],然后将其复制到C++字符串中。这通常是个坏主意

Two ways to do what you ask:
string myString("Hello, here is ");
myString += par1;
myString += " ";
myString += par2;
myString += " and another ";
myString += par3;

stringstream foo;
foo << "Hello, here is " << par1 << " " << par2 << " and another " << par3;
string myString(foo.str());
有两种方法可以满足您的要求:
字符串myString(“你好,这里是”);
myString+=par1;
myString+=“”;
myString+=par2;
myString+=“和另一个”;
myString+=par3;
川富;

除了现有的优秀答案之外,你可以考虑这个库。 例如:

std::string myString = str(boost::format("Hello, here is %s %s an another %s") % par1 % par2 % par3);
有很多答案。 由于C++字符串的长度很长,所以您希望使用STD::StrugSuffic来构建它们。这使您可以像写入内存中的文件一样写入字符串,并且可以高效地处理非常大的字符串。C函数snprintf()返回在传递空指针时将写入的字符数。所以您需要调用它两次,一次获取大小,然后分配缓冲区并再次调用格式化。这是一个很好的字符串解决方案,这些字符串应该很短并且具有定义的格式,但是可能会变得任意长,比如包含某人姓名的字符串


请注意,printf()格式对于整数、字符串和实数的基本输出既方便又易于使用,但它们不能扩展到用户定义的对象,因为没有公认的方法编写toString()方法并在调用后销毁字符串。它们也不能处理对象数组。有一个公认的约定,超载Boost有类似的东西,但是标准C++没有。但是,您可以将字符串(
std::string
s,即不是旧的字符串文本)与
operator+
连接起来。您应该已经遇到了
使用
std::ostringstream
的问题。如果这个答案有帮助,请检查@BaummitAugen我已经看到很多东西提到boost,这是C++开发中推荐的东西吗?谢谢。我觉得有时候我和C和C++会混淆,因为它们在某些地方是相似的。我朝小溪走去。