gpt4 book ai didi

c++ - setw 和重音字符

转载 作者:行者123 更新时间:2023-12-04 12:27:28 26 4
gpt4 key购买 nike

我想在 C++ 上显示一个“漂亮”的国家列表及其 ISO 货币代码。
问题是我的数据是法语,并且有重音字符。这意味着 Algolia ,实际上写成“Algérie”,而瑞典变成“Suède”。

map<string, string> currencies; /* ISO code for currency and country name: CAD/Canada */ 
for (auto &cursor: countries)
cout << setw(15) << left << cursor.second << right << " - " cursor.first << endl;
如果 map 包含 Algolia 、加拿大和瑞典,结果如下:
Canada          - CAD
Algérie - DZD
Suède - SEK
你看 Algolia 和瑞典怎么不“漂亮”?那是因为即使“Algérie”有 7 个可见字符,而“Suède”有 5 个,它们对于 setw 来说也“算”为一个。 “Algérie”中的“é”和“Suède”中的“蔓算”为两个字符,因为它们是“特殊重音字符”。
有没有 优雅 简单 确保 DZD 和 SEK 自动与 CAD 对齐的方法?

最佳答案

  • 转换为使用 std::wstring而不是 std::string
  • 转换为使用宽字符串常量 ( L"stuff" vs "stuff" )
  • 转换为使用 std::wcout而不是 std::cout
  • 使用 setlocale设置 UTF-8 语言环境
  • 使用 wcout.imbue为 UTF-8 语言环境配置 wcout

  • 例子:
    #include <map>
    #include <string>
    #include <iostream>
    #include <iomanip>
    #include <locale>

    int main() {
    setlocale(LC_ALL, "en_US.utf8");
    std::locale loc("en_US.UTF-8");
    std::wcout.imbue(loc);
    std::map<std::wstring, std::wstring> dict
    { {L"Canada",L"CAD"}, {L"Algérie",L"DZD"}, {L"Suède",L"SEK"} };
    for (const auto& [key, value]: dict) {
    std::wcout << std::setw(10) << key << L" = " << value << std::endl;
    }
    }

    关于c++ - setw 和重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69558438/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com