C ++ Split System.String并在String.Format中使用

时间:2012-10-20 18:04:27

标签: visual-studio-2008 c++-cli

基本上,我有一个字符串,其中包含我将传递给String :: Format()的占位符,如下所示:

"The {0} brown {1} jumped over the {2} {3}."

我还有另一个以逗号分隔的字符串,其中包含我希望填写到格式化占位符的字符串,如下所示:

"quick,fox,lazy,dog"

因此,填充格式字符串I Split(',')第二个字符串,并将其作为Format(first_str, second_split_array)中的第二个参数传递出来似乎很自然;

但是拆分第二个数组会产生一个System :: Array ^,Format()只看到一个对象,因此生气并告诉我我的索引必须小于或等于传递的参数数量。

最后我听说,String.Format()可以使用数组作为第二个arg,所以...我需要做什么才能以Format()看到所有args的方式分割字符串?

修改

这里的想法是索引元素的数量每次都不相同。我想要实现的目标是从服务器发送数据并将其填入模板。服务器发回逗号分隔列表和模板名称。因此,对于快速狐狸的例子,它会发送我上面的内容,但其他时候它会发送,比方说,错误,它使用:

"An error has occurred: {0} (Details: {1})"

和服务器参数"Error Name,Error text description and such."

2 个答案:

答案 0 :(得分:2)

不确定问题是什么,你确实可以将一个字符串数组传递给String :: Format()。 String :: Split()方法可以很容易地生成一个:

int main(array<System::String ^> ^args)
{
    String^ text = "quick,fox,lazy,dog";
    array<String^>^ words = text->Split(',');
    String^ result = String::Format("The {0} brown {1} jumped over the {2} {3}.", words);
    Console::WriteLine(result);
    return 0;
}

输出:

  

快速的棕色狐狸跳过懒狗。

答案 1 :(得分:0)

这可能是因为你将array<String^>^作为第二个参数传递给String::Format。如果您希望重载String::Format以数组作为第二个参数(并使用数组中的每个元素作为格式项),则需要传递 array<Object^>^ (每个Object^都是String^)。