无法将字符串列表格式化为列

时间:2012-04-16 19:41:46

标签: c# string list formatting

很抱歉让我感到很痛苦,但是我在将字符串列表格式化为列时遇到了问题,在c#中。 我正在使用的是输入文件,如; “aa bbb cccc ddddd eeeeee fffffff”

并使用字符限制(自动换行)我需要将这些单词分隔出来 输出:换行= 20

aa    bbb    cccc
ddddd eeeeee fffffff

目前我可以得到每行的单词数,但是例如如果一个单词由于换行而无法适应,我的程序将它放到另一行,但是我需要每行保持相同数量的字符串所以第一行有4个字符串,但其余的有5个,因为它们的字符串较小。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

所以你有一个for循环:

int longestWord = 0;

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

不确定你是如何为每一栏实现的,但这是一个想法?

答案 1 :(得分: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;
}