2012-04-16 39 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; 
}