Я пытаюсь найти общее решение, которое можно использовать для выравнивания текста слева и справа от указанной ширины строки.
Примечание: текст может быть практически на любом международном языке, английском, японском, китайском и т. д.
i.e
std::wstring str1 = L"Hello1";
std::wstring str2 = L"Hello2";
std::cout << std::string(50, '-') << endl;
std::wcout << std::left << std::setw(25) << str1 << std::right << std::setw(25) << str2 << std::endl;
Производит следующее:
--------------------------------------------------
Hello1 Hello2
Строка «----» имеет ширину 50 символов (без учета новой строки), а две строки «Hello1» и «Hello2» выровнены по левому и правому краю.
Но проблема в следующем:
std::wstring str1 = L"Hello1";
std::wstring str2 = L"Hello2";
std::wstring str3 = L"こんにちは";
std::wstring str4 = L"你好";
std::cout << std::string(50, '-') << endl;
std::wcout << std::left << std::setw(25) << str1 << std::right << std::setw(25) << str2 << std::endl;
std::wcout << std::left << std::setw(25) << str3 << std::right << std::setw(25) << str4 << std::endl;
std::cout << std::left << std::setw(25) << "こんにちは" << std::right << std::setw(25) << "你好" << std::endl;
Что производит следующее:
--------------------------------------------------
Hello1 Hello2
S�kao `}
こんにちは 你好
- Я безуспешно пытался найти способ выровнять третий ряд вправо, идеи?
- Я не понимаю, почему вторая строка представлена как «мусор», есть идеи, как исправить эту строку без каких-либо серьезных изменений?
string
иstd::string
используются для текста UTF8 или ASCII. Текстовые литералы UTF8 используют префиксu8
. Для UTF16 правильный тип —u16string
.wstring
иL
предназначены для двухбайтовых строк, которые являются подмножеством UTF16. Таким образом,L"こんにちは"
— это двухбайтовая строка, а"こんにちは"
— это просто строка ASCII, которая не может представлять ни один из этих символов. - person Panagiotis Kanavos   schedule 11.02.2020u8
во всех строковых литералах. Обратите внимание, что C++20 вводит типыchar8_t
иu8string
, чтобы избежать путаницы между ASCII и UTF8. - person Panagiotis Kanavos   schedule 11.02.2020Right-to-Left (RTL)
иLeft-to-Right (LTR)
. Они напрямую влияют на выравнивание - person MSalters   schedule 11.02.2020