如何获取字符串输出的宽度? [复制]

Posted

技术标签:

【中文标题】如何获取字符串输出的宽度? [复制]【英文标题】: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)将产生的输出的宽度?

【问题讨论】:

***.com/a/18850689/5470596 回答你的问题了吗? 我不确定 dup。 OP 可能需要一个通用的,而不是仅 UTF-8 的答案。 趣味阅读utf8everywhere.org/#myth.strlen @YSC 同意,标准库中没有任何用处,所以推出您自己的简单解码器。只有 OP 可以告诉我们他们的代码是 unicode utf-8 还是特定的 MBCS,但如果您可以选择,我建议您使用 utf-8,因为它“无处不在” 【参考方案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 可以提供帮助。见***.com/questions/402283/stdwstring-vs-stdstring 当你说它是“广泛支持”时,你的意思是有广泛的支持,或者 C++ 承认它退出可以使用它(有点)? @YSC:确实可以,尽管我建议,总的来说,使用 UTF-8。 我认为是'UTF-8'——没有小写的'a',而是两个'α'(希腊字母)。还有,这是在MAC上,绝对没有微软件。 @Quentin:无论哪种方式,它都充满了该死的 NUL 字符!

以上是关于如何获取字符串输出的宽度? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取在字符串中多次出现的单词的多个索引? [复制]

Jquery如何获取浏览器窗口宽度?

如何在具有特定宽度和高度的矩形中获取 svg 文本元素?

如何从 os.system() 获取输出? [复制]

如何在 Java Swing 中获取工具提示文本字符串的宽度?

如何从 ISO 8061 字符串日期时间派生以获取 Python3 中的时区名称? [复制]