【问题标题】:Increment string value from AAA to AAB to AAC and so on将字符串值从 AAA 递增到 AAB 到 AAC 等等
【发布时间】:2014-05-27 18:21:10
【问题描述】:

给定一个字符串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);

【问题讨论】:

  • 您遇到的实际错误是什么?它可能包含有关如何修复它的提示。
  • 以前没有用c#写过,但是错误的行会产生什么样的错误呢?这也会增加字符串中的所有字母,不是吗?我认为您需要另一个参数来告诉您要增加哪个字符。
  • 我添加了一个编辑。在我发布问题后它就来了。
  • 不要将解决方案添加到问题中,发布自我答案。请参阅faq
  • @HenkHolterman 我愿意,但我会接受 Flat Eric 提供的答案。

标签: c# algorithm


【解决方案1】:

您可以先转换为 int,然后再转换为 char:

digits[i] = (char)((int)digits[i] + 1);

更新:

它也可以在不强制转换为 int 的情况下工作:

digits[i] = (char)(digits[i] + 1);

【讨论】:

  • 你不需要 (int) 演员表。
  • 这是我的解决方案。谢谢。
【解决方案2】:
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]);
}

【讨论】:

    【解决方案3】:

    确实,这会导致类型冲突:

    digits[i] = digits[i] + 1;
    

    这样:

    digits[i] += 1;
    

    但这很好用:

    digits[i]++;
    

    感谢转至:Incrementation of char

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2017-06-26
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      相关资源
      最近更新 更多