2

可変長の文字の後に invoerstring という名前の文字列を分割したい (n は、文字列を分割する必要がある場合の文字数です)。文字列の長さが変数 n よりも短い場合は、文字列の長さ = n. 結果は、uitvoer というテキスト フィールドに表示する必要があります。

これはこれまでのところです:

string invoerstring = invoer.Text;

if (invoerstring.Length < n)
{
    invoerstring += "";
    char[] myStrChars = invoerstring.ToCharArray();
}

if (invoerstring.Length == n)
{
    string [] blok = invoerstring.Split();
    foreach (string word in blok)
    {
        uitvoer.Text = word;
    }
}

編集:上記の解決策は、私にとって完全に仕事をしているわけではありません。演習を投稿するときに役立つかもしれません:

|| nmd テキストの暗号化 || テキストは、その長さが n || の倍数になるまでスペースで埋められます。テキスト内の文字は、変位 d || だけアルファベットで循環的にシフトされます。例: d = 1 の場合、'a' -> 'b' 、'b' -> 'c' .... など... 'z' -> 'a' || テキストは長さ n 文字のブロックに分割されます || n のすべてのブロック内で、文字は循環的に m 回左にシフトされます || シフトされたグループが連結されます

私はすでにmを解決し、dはnを解決するだけで済みます。


上記の解決策は、私にとって完全には機能していません。演習を投稿するときに役立つかもしれません。

|| nmd テキストの暗号化 || テキストは、その長さが n || の倍数になるまでスペースで埋められます。テキスト内の文字は、変位 d || だけアルファベットで循環的にシフトされます。例: d = 1 の場合、'a' -> 'b' 、'b' -> 'c' .... など... 'z' -> 'a' || テキストは長さ n 文字のブロックに分割されます || n のすべてのブロック内で、文字は循環的に m 回左にシフトされます || シフトされたグループが連結されます

私はすでにmを解決し、dはnを解決するだけで済みます。

4

3 に答える 3

4

必要なコードは次のとおりです。文字配列を使用する必要はありません。

public static string EnsureExactLength(this string s, int length)
{
    if (s == null)
        throw new ArgumentNullException("null");

    return s.PadRight(length).Substring(0, length);
}

次のように呼び出します。

string s = "Test string".EnsureExactLength(4); // will return "Test"
string s = "Te".EnsureExactLength(4);          // will return "Te  "

LINQPadプログラムの例は、こちら にあります

于 2013-06-06T13:36:50.130 に答える
1

さて、私はあなたが上記のコードで何をしているのか正直にわかりません。なぜならSplit()、パラメータなしのような呼び出しが見られるからです。しかし、要件を満たすには、次の 1 行で行う必要があります。

string invoerstring = invoer.Text.PadRight(n, ' ').Substring(0, n);

はそれが と同じPadRightであることを確認し、はまでの部分を返します。nSubstringstringn

その文字列を配列に入れたい場合は、最後にあることがわかっているので、次のようにすることができます。

invoerstring.ToArray();
于 2013-06-06T13:36:30.083 に答える
0

LinqPad スクリプトは次のとおりです。

void Main()
{
    const string TEXT = "12345ABCDE12345ABCDE1234";
    const int LENGTH = 5;
    const char PAD = '#';

    Enumerable.Range(0, TEXT.Length / LENGTH)
        .Union(TEXT.Length < LENGTH ? new int[] { 1 } : new int[] {})
        .Select((index, item) => TEXT.Length < LENGTH 
                                    ? TEXT.PadRight(LENGTH, PAD)
                                    : TEXT.Substring(index * LENGTH, LENGTH))
        .Concat(TEXT.Length % LENGTH != 0 
                    ? new string[] { TEXT.Substring(TEXT.Length - (TEXT.Length % LENGTH)).PadRight(LENGTH, PAD) }
                    : new string[] { })                                 
        .Dump();

}
于 2013-06-06T14:15:11.040 に答える