【发布时间】:2017-12-16 02:47:04
【问题描述】:
使用 C,我知道通常sprintf 来格式化字符串。
但是用 C++ 格式化 std::string 的自然方法是什么?
int i = 2;
std::string s = std::string("hello letter ") + ('A' + i) + std::string(" bye bye")
预期输出:std::string 包含“hello letter C bye bye”
我收到一个相当神秘的错误:
错误 C2784: 'std::reverse_iterator<_ranit> std::operator +(_Diff,const std::reverse_iterator<_ranit> &)' : 无法推导出 'const std::reverse_iterator<_ranit> & 的模板参数'来自'int'
使用to_string('A' + i) 时,没有错误,但打印的是“67”而不是“C”。
注意:_UNICODE 已定义(平台:win32 / VC++),我是否仍然可以在代码中有时使用std::string,或者它是强制
到处都是std::wstring?
【问题讨论】:
-
'A'是一个 整数 (!!),但"A"是一个std::string(或者可以是一个,具体取决于上下文)。 -
先转换为
char? -
'A' + i是int类型,你可以使用char('A' + i)。 -
@ForceBru:
'A'是char,它是'A' + i类型为int。 (并且"A"的类型为const char[2])。 -
@ForceBru --
'A'在 C++ 中具有char类型。在 C 中是int。