【问题标题】:Combine std::wstring and function结合 std::wstring 和函数
【发布时间】:2015-01-26 20:26:49
【问题描述】:

我正在使用 c++ 的 SFML 2.1(这并不重要)创建文本。

设置文本字符串如下所示:text.setString("something");

好的,但是因为我的游戏语言是波兰语,所以我必须输入一些字符,例如 ą,ż,ł,ś,ć 等,这些字符在我的游戏的 ASCII 编码中不受“支持”。

我想出了这个解决方案:text.setString(L"śomęthińg");

但是,当您尝试将 wstring 和来自另一个函数的字符串结合起来时,就会出现问题。例如:

text.setString(L"Name: " + PlayerName() );

我尝试将其转换为字符串或创建临时变量,但要么不起作用,要么它删除了这个“特殊字符”...

完整示例:

std::string PlayerName()
{
    std::string name = "John";
    return name;
}

int main()
{
    sf::Text hello;
    hello.setString(L"Hello " + PlayerName() + L", how are you?");
    //I need to use L" "

    window.draw(hello);
}

有什么想法吗?

【问题讨论】:

  • PlayerName()返回的是什么类型?你能提供一个代码示例让我们看看你在做什么吗?
  • 您需要将PlayerName() 转换为wstring。你可以使用这篇文章中的代码来做到这一点:stackoverflow.com/a/18597384/4342498
  • 基本上你要做的就是尽可能用std::wstring 替换所有std::string:/ 实际上,我刚刚看到SFML 有它自己的字符串类型。使用那个sf::String
  • @Bionicl:Visual Studio 有一个Character Set: Use Unicode Character Set,它完全不相关,在这里对你没有任何帮助。

标签: c++ string ascii sfml wstring


【解决方案1】:

好的,我明白了!

正如@MooingDuck 所说,SFML has it's own string type,在这类问题上非常强大。

我的做法:

std::string PlayerName()
{
    std::string name = "John";
    return name;
}

int main()
{
    sf::String helloText = L"Hello ";
    helloText += PlayerName();
    helloText += L", how are you?";

    sf::Text hello;
    hello.setString(helloText);

    window.draw(hello);
}

非常感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多