问问题
445 次
2 回答
2
于 2016-03-06T20:26:42.647 回答
-2
您可以通过计算字符串在宽表示中的字符数来完成此格式化,然后计算字符串长度和宽表示之间的差异,然后将该差异添加到您传递给的内容中setw
,例如:
std::mbstate_t state = std::mbstate_t();
std::string s = "hi “my” friend";
const char *cp = s.c_str();
size_t len = mbsrtowcs(nullptr, &cp, s.size(), &state);
std::cout << setw(40 + (s.size() - len)) << std::right << s << std::endl;
您可以将此功能编码为一个函数,该函数将字符串作为参数并仅返回要添加到 setw 调用的差异:
size_t f(const std::string &s)
{
std::mbstate_t state = std::mbstate_t();
const char *cp = s.c_str();
size_t len = mbsrtowcs(nullptr, &cp, s.size(), &state);
return s.size() - len;
}
...
std::string s = "hi “my” friend";
std::cout << std::setw(40 + f(s)) << std::right << s << std::endl;
于 2020-03-25T03:24:12.273 回答