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