在C中拆分数组#

问题描述:

如何将一个字符串类型的数组平分为多个数组。
例如。
string [] input = {“a”,“b”,“c”,“”,“d”,“e”,“f”}
动态设置{string [] output =“a”,“b” , “C”, “” //第一次 串[]输出= “d”, “E”, “F”, “” //第二timetime}在C中拆分数组#

+2

那你试试?你有什么困难? – Oded 2011-12-22 10:20:39

+3

魔术8球说“长度”和“子串”,但它可能会说“它可能发生”... – 2011-12-22 10:22:01

+1

我认为OP是要求一种算法,他可以适用于任何情况下,当你有字符串,可以被分成许多不同的配置(不同长度的组成部分)。我认为这是一个比你想象的更深的问题。 – 2011-12-22 10:33:37

String[] splitString(int len, string input) 
{ 
    int idx = 0; 
    List<string> ret = new List<string>(); 
    while(idx < input.Length) 
    { 
    if (idx+len > input.Length) 
     ret.Add(input.Substring(idx)); 
    else 
     ret.Add(input.Substring(idx,len)); 
    idx+=len; 
    } 
    return ret.ToArray(); 
} 
+1

你没有仔细阅读这个问题。给定一个字符串作为输入数字,你需要得到数字长度的子字符串。 – Oded 2011-12-22 10:27:01

+0

@Oded是的,你是对的..我已经采纳了我的答案 – Matten 2011-12-22 10:31:48

前一段时间我实施Enumerable#each_slice从C#中的Ruby开始,似乎你可以使用它来获得你想要的。

static class ExtentionsMethods 
{ 
    public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> seq, int size) 
    { 
     while (seq.Any()) 
     { 
      yield return seq.Take(size); 
      seq = seq.Skip(size); 
     } 
    } 
} 

然后你只需

var str = "1234567890"; 
var res = str.Split(5); 

,但由于结果是IEnumerable<char>IEnumerable你可能想也

var arr = res.Select(c => String.Join("", c)).ToArray(); 

获得

改编{串[2]}
[0]: “12345”
[1]: “67890”