1

だから、私がこれをやろうとしているのは、次のようなものです:(例)

a、b、c、d..など aa、ab、ac..など ba、bb、bcなど

したがって、これは基本的に、a から始まるすべての可能なバリエーションを一般的に増加させて印刷するだけであると説明できます。これまでのところ、次のように始めて、1文字でそれを行うことができました。

for (int i = 97; i <= 122; i++)
{
    item = (char)i
}

しかし、最終的には 2 番目の文字、3 番目の文字などを追加できません。誰でも入力を提供できますか? ありがとう。

4

4 に答える 4

2

これまでのところ、文字通り「文字列をインクリメントする」ソリューションはなかったので、次のようにします。

static string Increment(string s) {
    if (s.All(c => c == 'z')) {
        return new string('a', s.Length + 1);
    }
    var res = s.ToCharArray();
    var pos = res.Length - 1;
    do {
        if (res[pos] != 'z') {
            res[pos]++;
            break;
        }
        res[pos--] = 'a';
    } while (true);
    return new string(res);
}

アイデアは単純です。文字が自分の数字であると仮定して、小学校で教えられている方法でインクリメントを行います。右端の「桁」から開始し、増分します。9 をヒットした場合 (これは'z'私たちのシステムにあります)、前の数字に進みます。それ以外の場合は、インクリメントが完了します。

明らかな特殊なケースは、「数字」が完全に 9 で構成されている場合です。これは、「カウンター」を次のサイズにロールアップし、「桁」を追加する必要がある場合です。この特別な条件は、メソッドの開始時にチェックされます。文字列が文字で構成されている場合、N文字sの'z'文字列が返されます。N+1'a'

ideone でのこのコードの簡単なデモへのリンクを次に示します。

于 2012-07-09T21:24:40.010 に答える
0

これを別の見方をすれば、基数 26 でカウントする必要があるということです。コンピューターはカウントが非常に得意で、値を格納する方法である基数 2 (2 進数) から基数 10 (10 進数) に常に変換する必要があるためです。 -- あなたと私が一般的に考えている数体系)、異なる基数への変換も非常に簡単です。

ここには、バイト配列を任意のベースに変換する一般的なベースコンバータがあります https://stackoverflow.com/a/3265796/351385 。基数を十分に理解し、そのコードを理解できるようになると、2 進数でカウントする基数 26 カウンターを作成するのは簡単なことですが、表示用に基数 26 に変換されます。

于 2012-07-09T21:53:31.970 に答える
0

forループの各反復は、「アイテム」の内容を完全に上書きしています-forループは、一度に1文字「i」を割り当てるだけです

item が文字列の場合は、次のように使用します。

item = "";
for (int i = 97; i <= 122; i++)
{
  item += (char)i;
}
于 2012-07-09T20:47:28.453 に答える
0

影響する何か

public string IncrementString(string value)
{
    if (string.IsNullOrEmpty(value)) return "a";

    var chars = value.ToArray();
    var last = chars.Last();

    if(char.ToByte() == 122)
    return value + "a";

    return value.SubString(0, value.Length) + (char)(char.ToByte()+1);
}

おそらくcharをバイトに変換する必要があります。これは、次のような拡張メソッドでカプセル化できますstatic int ToByte(this char)

大量の文字列を作成する場合は、StringBuilder を選択することをお勧めします。そのため、文字列連結の代わりにそれを使用することを検討してください。

于 2012-07-09T20:49:48.263 に答える