如何访问Platform :: String中的单个字符?

时间:2016-05-15 00:35:35

标签: string windows visual-c++ windows-10-universal c++-cx

如何访问Platform::String^中的个别角色?

我正在使用此变量类型,因为它似乎是在通用Windows应用程序上将字符串写入TextBlock的唯一方法。

我尝试了以下方法来获取单个字符无效:

String ^ str = "string";
std::string::iterator it = str->begin(); //Error: platform string has no member "begin"
std::string::iterator it = str.begin(); //Error: expression must have a class type
str[0] = 't' /*Error: expression must have a pointer-to-object or handle-to-C++/CX 
mapping-array type*/

我将String ^放在名为" textBlock"的文本块中。如下:textBlock->Text = str;

我对修改Platform::String以外的方法持开放态度。我唯一的要求是字符串以可以放入TextBox的形式结束

2 个答案:

答案 0 :(得分:2)

Platform::String表示用于表示文本的Unicode字符的顺序集合。受控序列是不可变的:一旦构造,Platform::String的内容就不能再修改了。

如果需要可修改的字符串,则规范解决方案是使用另一个字符串类,并在调用Windows运行时或接收字符串数据时转换为/ Platform::String。这在Strings (C++/CX)

下进行了解释
  

Platform :: String Class 提供了几种常见字符串操作的方法,但它并不是一个功能齐全的字符串类。在C ++模块中,使用标准C ++字符串类型(如wstring)进行任何重要的文本处理,然后在将结果传递给公共接口或从公共接口传递之前将最终结果转换为Platform::String^

您可以按如下方式重写代码示例:

// Use a standard C++ string as long as you need to modify it
std::wstring s = L"string";
s[0] = L't';    // Replace first character

// Convert to Platform::String^ when required
Platform::String^ ps = ref new Platform::String(s.c_str(), s.length());

答案 1 :(得分:0)

对已经提供的答案的补充:您还可以将Platform :: String ^更改为std :: wstring,以便您可以修改它,然后您可以随时将其更改回Platform :: String ^

Platform::String^ str = "string";
wstring orig (str->Data());
orig[0] = L't';
str = ref new Platform::String(orig.c_str());