これまでのところ、文字通り「文字列をインクリメントする」ソリューションはなかったので、次のようにします。
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 でのこのコードの簡単なデモへのリンクを次に示します。