【问题标题】:How to obtain the width of string output? [duplicate]如何获取字符串输出的宽度? [复制]
【发布时间】:2019-01-24 16:12:19
【问题描述】:

考虑

#include <string>
#include <iostream>

int main()
{ 
    std::string test="αλφα";
    std::cout << "size() of '" << test << "' = " << test.size() << std::endl;
}

产生

'αλφα'的大小() = 8

如何使用 C++ 标准库找到通过编写字符串(即上面示例中的 4)将产生的输出的宽度?

【问题讨论】:

  • stackoverflow.com/a/18850689/5470596 回答你的问题了吗?
  • 我不确定 dup。 OP 可能需要一个通用的,而不是仅 UTF-8 的答案。
  • @YSC 同意,标准库中没有任何用处,所以推出您自己的简单解码器。只有 OP 可以告诉我们他们的代码是 unicode utf-8 还是特定的 MBCS,但如果您可以选择,我建议您使用 utf-8,因为它“无处不在”

标签: c++ string


【解决方案1】:

这里的问题与字符串相关的编码有关。

这在我看来像是 UTF-8 编码(第一个字符不是小写 'a')。在该编码中,您呈现的字符占用两个字节,每个字节都说明了答案。

C++11 标准广泛支持 UTF-8 编码(相当优雅地,UTF-8 在任何文本流中都没有任何零字节cf. Windows Unicode) - 您可以使用std::string 虽然长度通常会被低估 - 但在直接在编辑器中创建该类型的字符串文字时必须小心。

更多阅读:How to use Unicode (UTF-8) in C++

【讨论】:

  • 在 Windows 上,std::wstring 可以提供帮助。见stackoverflow.com/questions/402283/stdwstring-vs-stdstring
  • 当你说它是“广泛支持”时,你的意思是有广泛的支持,或者 C++ 承认它退出可以使用它(有点)?
  • @YSC:确实可以,尽管我建议,总的来说,使用 UTF-8。
  • 我认为是'UTF-8'——没有小写的'a',而是两个'α'(希腊字母)。还有,这是在MAC上,绝对没有微软件。
  • @Quentin:无论哪种方式,它都充满了该死的 NUL 字符!
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2015-12-30
  • 2011-04-07
  • 2013-05-12
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多