给定一个包含制表符的C ++ std::string
变量,是否可以确定该字符串在“屏幕”上显示的长度?即:
std::string var = "\t\t\t";
std::cout << var.length(); // result: 3
std::cout << printed_length(var); // result: 3*(# of spaces per tab)
答案 0 :(得分:3)
不容易。如果不了解所涉及的“屏幕”(实际上是驱动输出的软件)的特定知识,这是不可能的,因为标签扩展变化如此广泛。有四种相当明显的可能性,基于固定扩展与扩展到某种倍数,并且基于字符单元与一些其他固定测量(例如,对于比例字体)。还有“智能选项卡”具有更复杂的标准,其中一个选项卡的扩展可能依赖于另一个选项卡。
在一个典型的“控制台”上,它将是扩展mod 8字符单元格。要解决这个问题,您不仅要计算选项卡,还要查看字符串中每个选项卡的位置。您还必须对字符串开头相对于制表位的位置做出一些假设(或提供参数)。
结论:如果你想做这样的事情,你必须自己做,基于如何在你的目标上扩展标签的知识。
答案 1 :(得分:3)
我们将简化假设,即字符串中的文本是一行中的唯一文本,或者它是从标签边界开始的。
每个制表符将根据前面的字符数扩展到不同的空格数。
expansion_count = n_spaces - (current_count % n_spaces);