我正在尝试创建一个函数,该函数将在传递索引时为我提供字母位置。它将与 excel 如何显示它的列相同。A...Z, AA,AB.... 我写了下面的函数来得到 Z 的结果。它看起来像
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index <= alphabetsCount)
{
int code = (index - 1) + (int)'A';
return char.ConvertFromUtf32(code);
}
return string.Empty;
}
这工作正常,直到'Z'。如果我通过 1 则返回“A”,如果通过 2 则返回“B”,依此类推。但是,当我将 27 传递给这个函数时,我无法弄清楚我将如何获得 AA。我想我需要一种递归方法来找到它。
对这个问题的任何投入都会很棒!
编辑
这是 Tordek 建议的。但是他的代码会在 52、78 等数字上失败。为此添加了解决方法,这是最终的工作代码。
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index > alphabetsCount)
{
int mod = index % alphabetsCount;
int columnIndex = index / alphabetsCount;
// if mod is 0 (clearly divisible) we reached end of one combination. Something like AZ
if (mod == 0)
{
// reducing column index as index / alphabetsCount will give the next value and we will miss one column.
columnIndex -= 1;
// passing 0 to the function will return character '@' which is invalid
// mod should be the alphabets count. So it takes the last char in the alphabet.
mod = alphabetsCount;
}
return GetColumnName(columnIndex) + GetColumnName(mod);
}
else
{
int code = (index - 1) + (int)'A';
return char.ConvertFromUtf32(code);
}
}