#cpp #строки #потоки_данных
Привет! Есть таблица некоторых строковых переменных (string). Необходимо эту таблицу вывести в адекватном форматированном виде. Проблема заключается в том, что при использовании манипулятора setw () строки, разные по длине, занимают разную ширину поля, а не фиксированную. #include#include #include using namespace std; int main () { string one = "Один", two = "Два", eight = "Восемь"; cout << setw (10) << one < Ответы
Ответ 1
Эх. Судя по всему, это проблемы интернационализации и utf-8. Дело в том, что C++ не знает об utf-8, и считает ширину поля в байтах, а не в реальных символах. А для utf-8 количество байт не равно количеству символов. Обратите внимание, что у вас ширина поля получилась не 10, а меньше — текст "Один" в utf-8 занимает больше четырёх байт, поэтому количество недостающих до 10 байт меньше. Попробуйте перейти на широкие строки: wstring one = L"Один", two = L"Два", eight = L"Восемь"; wcout << setw (10) << one << endl; wcout << setw (10) << two << endl; wcout << setw (10) << eight << endl; Если вы работаете под Windows, вам придётся прибегнуть к небольшой акробатике, чтобы заставить консоль правильно понимать широкие строки. Под линуксом, кажется, достаточно в начале программы применить заклинание setlocale(LC_ALL, ""); Заметьте, что консольный ввод/вывод приложения должен быть либо полностью «узкий», либо полностью «широкий»: переключиться после первого выведенного символа уже нельзя.
Комментариев нет:
Отправить комментарий