将字符串值从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);

将字符串值从AAA增加到AAB再增加到AAC,依此类推

您可以转换为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]++;

感谢转到:字符的增量