1
4

2 回答 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 回答