GCC下的简单C++字符串格式
Simple C++ string formatting under GCC
我正在将别人的C++库转换为在GCC(Xcode)下工作。字符串格式化的基本方法是什么?
编辑:我看到我的问题最初的措辞引起了很多困惑,更不用说一些娱乐了。我需要做的是替换库中的某些字符串格式化函数。他们已经通过wxString进行了格式化,我不想把它包括在我的项目中——我知道它适用于Xcode,但对于我需要做的简单格式化来说,这似乎是一种大锤式的方法,并且我需要创建相同的(char*)输出[然后这些输出可能会转到库中的另一个对象;不一定会转到用户],但要以不使用wxString的方式进行。我宁愿避免把它变成C++。在Objective-C中,我一直使用NSString的stringWithFormat:方法来实现这一点。显然,我不想使用任何NSString方法,也不想创建NSString。创建(char*)或C++字符串就可以了。不,这不是一个虚假的事实,也不是家庭作业。
您可以使用流:
std::stringstream ss;
ss << somedouble << someint;
您可以使用printf函数家族,但在99.99%的情况下,这是非常不受欢迎的,原因非常充分。
看看老虎托尼的回答。
编辑:好的。为什么不赞成格式化字符串。
-
如何打印自己的类型或来自第三方C++库的类型?与printf不同,流是可扩展的:
cout << foo << 'n';
与
printf("%s:%f%f/scc(%d)\n",foo.name(),foo.height()、foo.width()、foo.depth(),foo.sampleCount())
-
哦,废话,将非POD类型传递给varargs会产生未定义的行为;猜猜
foo.name()
的返回类型是什么?有趣的是,它编译得很好,而且根据实现的不同,甚至可能因为一些奇怪的原因而工作。 -
过了一段时间,我开始使用我自己的非基元
Decimal
-实现,由foo.width()/height()/depth()
用作返回类型。糟糕透顶,现在我仅在这一行中就调用了4次未定义的行为。 -
如何避免格式字符串冗余?我应该这样具体化打印吗:
printf("foo is:");printFoo(stdout);printf("\n")
- 最后,我度过了糟糕的一天和糟糕的一晚。我键入:
float f; fscanf(stdout, "%c %f", f);
->请查找所有错误
sprintf()
是一个很好的起点。然而,这真的取决于你不想实现什么。正如Tony The Tiger所指出的,std::stringstream
是一个很好的选择,Boost。格式是另一种。
在C++中有很多方法。例如:
char str[256];
snprintf (str, sizeof (str), "%g %d %s", someDouble, someInteger, someString);
您也可以直接打印到一些输出流,使用C++I/O流,甚至达到Boost.LexicalCast.
- 字符串::格式有什么用. 我也没有在互联网上得到它
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 十进制到八进制递归C++.以标准::字符串格式输出
- 如何从字符串格式中提取 3 个整数"v%d.%d.%d"?
- 查找可变参数列表的字符串格式指定符
- 字符串格式替换为 snprintf 中字符中的值
- 使用堆栈将字符串格式的十进制转换为双精度
- 使用字符串格式限制十六进制数字的数量
- 视觉C++:字符串格式
- C++字符串格式实现错误
- 如何在Xcode中将长双精度转换为字符串格式?或如何解决错误"use of undeclared identifier 'to_string' "
- C++以字符串格式 YYYYMMDD 减去天数
- 如何在windows和linux中使用相同的宽字符串格式
- 如何将标准::字符串格式的 JSON 解码为 Boost 属性树
- C++格式的字符串格式
- 使用C++将任何形式的日期-时间字符串格式更改为美国日期-时间格式
- 使用C/C++设置字符串格式
- 如何创建以字符串格式使用给定变量文本的宏(或其他工具)
- 如何转换?toString() 的 C 字符串格式
- 用字符串格式运算符替换C++字符串