C# で連続した文字を生成したい。
たとえば、変数の最初の値は "a" で、その後に "b"、"c"、... が続きます。"z" の後、範囲は "aa"、"bb"、... と続きます。
何かのようなもの
i=0;
while(i<40)
{
Console.WriteLine(i);
i++;
}
ただし、文字を使用します。
整数をインクリメントできるように、文字をインクリメントできます。
char c = 'a';
while(c <= 'z')
{
// Do something with c
c++;
}
注、私はこれを盛り上げただけです。私はそれを試していません。
for (int i=0; i<40; ++i)
{
char digit = (char) (97 + i%26); // utf/ascii code 97 == 'a'
Console.WriteLine(new String(digit, i/26 + 1));
}
コンストラクターはString(char c, int n)
、文字 c が n 回繰り返された文字列を返します。そこから、何を繰り返すか (0、26、52 の場合は 'a' など) と、それを何回繰り返すか (0 の場合は 1、26 の場合は 2、52 の場合は 3 など) を指定するだけです。
また、i
何であってもよいことに注意してください (まあ、任意の正の数)。あなたがしていたように、0から40までループしました。それまで作業したり、中間結果を保存したりする必要はありません。
あなたが新しい宿題タグを追加したので、私はあなたに完全な答えを与えるつもりはありませんが、正しい方向へのポイントを与えます. Florian Greinacher が言ったように、数値と同じように ascii 文字を「数え」ることができます (実際、できると思います。C# でこれを行ったことはありません。厳密な型付けでは可能ですか?)。
Florian のアドバイスを使用してください。ただし、az ループを完了した回数を追跡し、より多くの反復を通じて必要なもののより多くのコピーを出力してください。
「ab」や「ba」、または単に「aa」「aaa」などを出力する必要がありますか?
26文字の配列を宣言します。ここで、[0] = a、[1] = bなどです。次に、指定された整数について、26で除算し、商とmodの値を変数として格納します。答えは、位置(mod-1)の要素で、(商+ 1)回印刷されます。以下のこのコードは完全ではありません。おそらく、intをうまく再生するには、キャストを使用する必要があります。また、この例では92という数字を使用していますが、任意の(数字)を使用できます...
string[] letters = {'a', 'b', ... };
int number = 92;
int quotient = number / 26; // answer is 3
int mod = number % 26; // answer is 14
string answer = "";
for (int i = 0; i <= quotient; i ++) {
answer += letters[mod - 1];
}
return answer;
疑似コード:
Declare a base string
Inialize base string to ""
for each letter in alphabet
print base_string + letter
if(letter == last letter)
base_string = base_string + letter
letter = first letter
next letter
この問題は、スタック データ構造でうまく機能します。文字をインクリメントするたびに、一番上のアイテムをインクリメントするか、「a」に変更してから次のアイテムを変更します。ベース文字が az である場合は、a に変更してから a をスタックに追加します。
コードは教えません。
int を char に変換できます ( soのように)。このようにして、int でループを
使用できます。
ステートメントを使用して、int が z の値を超えているかどうかを確認し、その場合は int から z の値を減算して、二重文字を書き込むために使用できる違いを見つけることができます。
「z」を渡すと面倒になる可能性があるため、char でループしないことをお勧めします。for
if