我有一个需要放入的浮点值std::string.如何从float转换为字符串?
float val = 2.5;
std::string my_val = val; // error here
以下C函数:
int sprintf ( char * str, const char * format, ... );
将格式化数据写入字符串.作为str传递的数组的大小应该足以包含整个格式化的字符串.但是,如果格式化字符串的长度未提前知道怎么办?如何使用此函数(或类似其他函数)写入格式化数据,其长度未知?
例如:
#include <stdio.h>
int main ()
{
  char buffer [13];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a %d char long string\n",buffer,n);
  return 0;
}
缓冲区需要为13或更大才能使其正常工作.如果字符串长度未知,并且缓冲区(例如)已设置为5,则此操作无效.我需要能够为碰巧大于缓冲区的字符串动态分配或重新分配缓冲区的东西.
我有一个与std::string 格式非常相似的问题,例如 sprintf或这个问题,但这些问题非常旧,所以我敢于重试以收集一些方法。
我想要一个函数/方法,它接受参数来定义带有一些变量的格式化字符串,很像printf/ sprintf。例如,它可以是一种send_string(ARGS)格式化字符串并将其发送到某个接收者的方法。例如:
server->send_message("value1: %d, value2: %0.3f, value3: %s", 2, 3.14, "hello world");
我知道流的概念,我也知道boost::format。但我想知道没有不必要的依赖关系的最简单的方法是什么。
这是我的想法:
使用基于流的方法- 结果将如下所示:
server->msg_out() << "value1: " << 2 
                  << ", value2: " << 3.14 
                  << ", value3: '" << "hello world" << "'";
这对我来说看起来最合理,但它非常冗长,很难看出输出会是什么样子。特别是当您尝试实现表格输出或实际值的特殊格式时。从好的方面来说,你没有任何依赖性。
使用基于 C 的变量参数。看起来就像上面的例子,尽管它已被弃用、容易出错且不灵活,但它是众所周知的并且被大量使用。
server->send_message(boost::format(
            "value1: %d, value2: %0.3f, value3: %s") % 2 % 3.14 % "hello world")); …我真的很喜欢c ++中sprintf给出的答案?但它仍然不是我想要的.
我想用占位符创建一个常量字符串,比如
const std::string LOGIN_URL = "%s://%s/chronicle/spring/api/logout";
然后使用可替换参数构建字符串,如:
sprintf(url, LOGIN_URL, protocol, server); //coding sprintf from long ago memory, please ignore
但是如果我能帮忙的话,我真的想远离C弦.
stringbuilder()方法要求我把我的常量字符串组合起来并在我想要使用它们时组装它们.这是一个很好的方法,但我想要的是更整洁.