2012-04-16 43 views
0

对不起,很遗憾,但我有麻烦在c#中将我的字符串列表格式化为列。 我使用的是一个输入文件,如; “AA BBB CCCC DDDDD EEEEEE FFFFFFF”无法将列表中的字符串格式化为列

,并使用字符的限制(自动换行)我需要空间出来的话,像这样 输出:裹= 20

aa bbb cccc 
ddddd eeeeee fffffff 

此刻,我能得到每行的单词数量,但是例如如果一个单词由于换行而不能放入,我的程序会把它放到另一行,但是我需要每行保持相同数量的字符串,所以第一行会有4个字符串,但是其余5个,因为他们有更小的字符串。

在此先感谢。

+0

固定列大小或没有停止? – msarchet 2012-04-16 19:44:07

+0

不,列的大小可以是任意大小,因为间距是为了将它们放在一条线上,并且它不超过换行。只要线上的字符串数量必须相同。除了最后一行可以少一些 – 2012-04-16 19:56:36

+0

您能详细说明每行的字符串限制吗?我想我明白你在说什么,但是我不确定你想要什么,如果你在第一行说5个字符串,并且在下一行需要5个更大的字符串导致它包装,但这违反了“相同规则“。 – covertCoder 2012-04-16 19:57:42

回答

0

您可以通过循环遍历数组中的每个第n项来计算每列的间距。

例如,如果您知道每行的单词数量,例如每行3个单词,则可以从第一个元素开始获取每个第三个元素,以获取第一列最长的单词。

所以你必须一个循环:

int longestWord = 0; 

for(int i = 0; i < arrayLength; i += wordsPerLine) 
{ 
    if(array[i].Length > longestWord) 
     longestWord = array[i].Length; 
} 

不知道你会如何实现这个每列,但它是一个想法?

0

我能想到的唯一方法很复杂 您可以首先获取对字符串进行拆分的组数,然后获取每组中的字符数。 当你有,你就可以开始制作群体,而当亚组的一个超过上限

//creates groups and lengths arrays 
string letters = aaa bbbb ccc dd eeeeeee ffffffffff gggggggggggggggg hh iiiiiiiiii; 
string[] groups = letters.split(" "); 
int[] lengths = new int[groups.length] 
    for(int i = 0; i<groups.length, i++){ 
    lengths[i] = groups[i].length; 
} 
int numberofrows; 
//starts doing groups: is one element is more that 20, then if 2 elements are more 
//than 20, 3 elements more than 20.... 
// when a sum is more than 20, then the last amount of groups was the one to use 
for(int i = 0, i<groups.length<i++){ 
    for(int j = 1, j<=groups.length, j++) 
     int sum = add(i, j) 
     if(sum > limit){ 
      numberofrows = j-1; 
      return; 
     } 
    } 
} 

//this makes the addition of several elements of the array, next to the other 
public int add(int index, id sums){ 
    int sum = lengths[index]; 
    for(int i = 0, i<=sums;i++){ 
     sum += lengths[index+i]; 
    } 
    return sum; 
}