String visualc&x2B+;系统字符串,返回对字符串中位置处的字符的引用 我想在VisualC++中得到一个字符串的特定字符,就像这个例子(C++):

String visualc&x2B+;系统字符串,返回对字符串中位置处的字符的引用 我想在VisualC++中得到一个字符串的特定字符,就像这个例子(C++):,string,c++-cli,String,C++ Cli,错误:“at”:不是“System::String”的成员 这意味着处的函数不是System::String。。。我还可以使用其他功能吗 我使用Visual Studio C++ 2010…应用程序是在windows窗体中创建的 谢谢尝试使用数组索引: Messagebox::Show( text[4] ); //Return the character 'i' 更新 正如Hans Passant指出的,这个解决方案的问题不是数组索引。它试图将一个字符传递给Messagebox::Show,

错误:“at”:不是“System::String”的成员

这意味着处的函数不是System::String。。。我还可以使用其他功能吗

我使用Visual Studio C++ 2010…应用程序是在windows窗体中创建的


谢谢

尝试使用数组索引:

Messagebox::Show( text[4] );  //Return the character 'i'
更新

正如Hans Passant指出的,这个解决方案的问题不是数组索引。它试图将一个字符传递给Messagebox::Show,它接受一个字符串。有关更多信息,请参阅他的解决方案

这21个重载都无法转换所有参数类型

对。但是仔细阅读错误消息,Show()方法的重载都不适用。它并不是在抱怨操作符[],它很好,并且做了您期望它做的事情。如果你想一想,这是有道理的,你永远不会用MessageBox来显示一个字符。只有一串。所以这是可行的:

  String^ text = "String";
  Char ch = text[4];
  MessageBox::Show(gcnew String(ch, 1));

但是,当然,您永远不会编写这样的代码,所以请后退一步,回顾一下您真正想要完成的任务。不要假设STL模板类类似于它们的.NET等价物,使用垃圾收集器会使收集类更易于实现。

其他答案给出了System::String中的第五个代码单元。虽然这更像是C++代码,但它可能不是你想要的。 字符串是UTF-16LE编码中的Unicode字符的编码单元计数序列。在此编码中,字符的代码点可能是一个或两个代码单元。因此,直接索引到一个系统::字符串跳过一个未知的字符数,如果你在一个代码点的中间有两个代码单位,你只得到一半的代码点。 如果需要第五个字符,则需要使用该类

显然,它返回System::String,因为System::Char是一种代码单元类型,不足以保存代码点

注意:此类处理需要多个代码单元作为其代码点的组合表单和字符

试试“na\u0308ive”。它将给出“ả”作为第二个文本元素

Messagebox::Show( text[4] );  //Return the character 'i'
  String^ text = "String";
  Char ch = text[4];
  MessageBox::Show(gcnew String(ch, 1));
new StringInfo(text)->SubstringByTextElements(4, 1)