将字符串值从AAA增加到AAB再增加到AAC,依此类推
本文关键字:增加 AAC 依此类推 AAB 字符串 AAA | 更新日期: 2023-09-27 18:05:20
给定字符串AAB
,如何返回字符串AAC
?我已经尝试过在这个答案上使用一些方法,但在尝试将int
转换为char
时出错,反之亦然。
public string GetNextPrefix(string prefixToIncrement)
{
char[] digits = prefixToIncrement.ToCharArray();
for (int i = previousPrefix.Length - 1; i >= 0; --i)
{
if (digits[i] == 'Z')
{
digits[i] = 'A';
}
else
{
digits[i] = digits[i] + 1; //error here
break;
}
}
return new String(digits);
}
更新:杜。有时我一在这里发帖,答案就在我发帖的时候出现了。错误是:
Cannot covert source type 'int' to target type 'char'
。
我把这行改成:
digits[i] = (char) (digits[i] + 1);
您可以转换为int,然后再转换回char:
digits[i] = (char)((int)digits[i] + 1);
更新:
它也可以在不转换为int:的情况下工作
digits[i] = (char)(digits[i] + 1);
public string GetNextPrefix(string prefix, string format = "000")
{
const string Charset = "ABCDEF";
//remove the ToUpper() if you want to expand the charset to contains both cases
var values = prefix.ToUpper().Select(c => Charset.IndexOf(c));
if (values.Any(v => v == -1))
throw new Exception("Invalid Prefix : " + prefix);
var value = values.Aggregate(0, (acc,v) => acc = acc * Charset.Length + v) + 1;
var result = String.Empty;
while(value != 0)
{
var remainder = value % Charset.Length;
result = Charset[remainder] + result;
value = (value - remainder) / Charset.Length;
}
return result.PadLeft(format.Length, Charset[0]);
}
事实上,这会导致类型冲突:
digits[i] = digits[i] + 1;
正如这样:
digits[i] += 1;
但这很好:
digits[i]++;
感谢转到:字符的增量