0

申し訳ありませんが、C# で文字列のリストを列にフォーマットするのに問題があります。私が使用しているのは、次のような入力ファイルです。「ああ、bbb cccc ddddd eeeeee fffffff」

文字制限(ワードラップ)を使用して、次のように単語の間隔を空ける必要があります出力:ラップ= 20

aa    bbb    cccc
ddddd eeeeee fffffff

現時点では、行ごとの単語数を取得できますが、たとえば、折り返しのために単語が収まらない場合、プログラムはそれを別の行に配置しますが、行ごとに同じ数の文字列を維持する必要があるため、最初の行4 つの文字列がありますが、残りの文字列は小さいため 5 つです。

前もって感謝します。

4

2 に答える 2

0

私が考えることができる唯一の方法は複雑です。最初に文字列で分割を行うグループの数を取得してから、各グループの文字の数を取得できます。それができたら、グループの作成を開始でき、サブグループの1つが制限を超えたときに停止します

//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 番目ごとの項目をループすることで、各列の間隔を計算できます。

たとえば、1行あたりの単語数がわかっている場合、1行あたり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 に答える