0

很抱歉很痛苦,但我无法在 c# 中将我的字符串列表格式化为列。我正在使用的是一个输入文件,例如;“aa bbb cccc ddddd eeeeee fffffff”

并使用字符限制(自动换行)我需要像这样将单词隔开输出:Wrap = 20

aa    bbb    cccc
ddddd eeeeee fffffff

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

提前致谢。

4

2 回答 2

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;
}
于 2012-04-17T02:14:26.183 回答
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;
}

不确定如何为每一列实现这一点,但这是一个想法?

于 2012-04-16T19:49:34.220 回答