Как определить (напечатанную) длину std :: string с расширенными символами табуляции? - PullRequest
5 голосов
/ 29 ноября 2011

Учитывая переменную C ++ std::string, которая включает символы табуляции, возможно ли определить длину этой строки так, как она будет отображаться на "экране"? i.e.:

std::string var = "\t\t\t";
std::cout << var.length();          // result: 3
std::cout << printed_length(var);   // result: 3*(# of spaces per tab)

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Мы сделаем упрощенное предположение, что текст в строке является единственным текстом в строке или начинается с границы табуляции.

Каждый символ табуляции будет расширяться до разного количества пробеловна основе количества символов до него.

expansion_count = n_spaces - (current_count % n_spaces);
3 голосов
/ 29 ноября 2011

не легко.Это невозможно без конкретных знаний об «экране» (на самом деле, о программном обеспечении, обеспечивающем вывод), поскольку расширение вкладок варьируется так широко.Существует четыре довольно очевидных возможности, основанных на фиксированном расширении или расширении до множества чего-либо, и на основе символьных ячеек в сравнении с некоторыми другими фиксированными измерениями (например, для пропорциональных шрифтов).Существуют также «умные вкладки» с еще более сложными критериями, в которых расширение одной вкладки может зависеть от другой вкладки.

На типичной «консоли», которая будет состоять из 8 символов ячейки расширения.Чтобы справиться с этим, вам нужно не только сосчитать вкладки, но и посмотреть на положение каждой вкладки в строке.Вам также нужно будет сделать некоторые предположения (или указать параметр) относительно позиции начала строки относительно позиции табуляции.

Итог: если вы хотите сделать что-то подобное, вы 'Я должен сделать это сам, основываясь на знании того, как вкладки будут расширены для вашей цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...