在c++中格式化未知长度的字符串
Formatting a string of unknown length in C++
我目前正在学习c++,我找不到如何创建一个字符串与格式化器采取多个参数,如使用sprintf,但未知的字符串长度。
我要做的是像
这样的东西string myString = string.format("Hello, here is %s %s and another %s", par1, par2, par3);
我知道在C中有一个asprintf函数,它计算出字符串的长度,它占用内存,你需要在完成后释放它,然而,这似乎不适用于c++,尽管sprintf是。我在google上看到的关于asprintf的一切似乎主要集中在Linux上,而我需要的是跨平台。
我所看到的关于c++和字符串格式化的一切都需要定义一个固定长度的字符数组并使用sprintf,但是我不知道字符串的长度,所以我不能这样做。
除了现有的优秀答案之外,您可以考虑Boost Format库。
的例子:
std::string myString = str(boost::format("Hello, here is %s %s an another %s") % par1 % par2 % par3);
获取Josuttis的《标准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());
有很多答案。由于c++字符串变得非常长,您希望使用std::stringstream来构建它们。这使您可以像写入内存中的文件一样写入字符串,并且可以有效地处理非常大的字符串。C函数snprintf()返回传递空指针时应该写入的字符数。所以你需要调用它两次,一次获取大小,然后分配缓冲区,再次调用format。这是一个很好的解决方案的字符串,预计是相当短的,具有一个已定义的格式,但可能会变得任意长,像一个字符串包含某人的名字。
请注意,printf()格式对于整数、字符串和实数的基本输出是方便且易于使用的,但它们不能扩展到用户定义的对象,因为没有可接受的方法来编写toString()方法并在调用后销毁字符串。它们也不能处理对象数组。重载<<将对象的文本表示形式写入流。
- 输入中的字符串数未知(以字母表示)
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何使用指针将未知长度C++字符串封送到 C#?
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 字符串因未知原因而搞砸
- c++正在将未知结构转换为字符串
- 我有这个单码字符串"Param�tres",è被转换为未知字符。
- 尝试将未知数量的字符串推送到向量中,但我的 cin 循环没有终止
- variadic宏可从未知参数集合中生成字符串向量
- 字符串流到具有未知分隔符的变量
- 当我将字符添加到空字符串(如 " " + c)时,为什么要返回未知值?
- C++将int转换为具有未知基的字符串的简单方法
- 如何在C++中读取未知大小的字符串
- 读取长度未知的键入字符串
- 使用字符串时,C++未知重写说明符
- 从C#调用的C++中,返回一个长度先验未知的字符串
- 将字符串中的元素与字符进行比较时出现未知错误
- 在输入过程中,将字符串存储在大小未知的向量中
- 将字符串添加到未知大小的数组c++中