字符的递增

25
我发现一些问题问如何让字符'B'返回'C',然后是'D'等。答案相当复杂,而且大多只是过度设计。为什么不简单地使用这个呢:
char X='A';
X++;

编辑:它从A到Z,接下来是什么?

3个回答

44

如果您只想进行递增操作:

Char x = 'A';
Char y = (Char)(Convert.ToUInt16(x) + 1);

但是,如果你想要类似于Excel的列:

    // (1 = A, 2 = B...27 = AA...703 = AAA...)
    public static string GetColNameFromIndex(int columnNumber)
    {
        int dividend = columnNumber;
        string columnName = String.Empty;
        int modulo;

        while (dividend > 0)
        {
            modulo = (dividend - 1) % 26;
            columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
            dividend = (int)((dividend - modulo) / 26);
        }

        return columnName;
    }

    // (A = 1, B = 2...AA = 27...AAA = 703...)
    public static int GetColNumberFromName(string columnName)
    {
        char[] characters = columnName.ToUpperInvariant().ToCharArray();
        int sum = 0;
        for (int i = 0; i < characters.Length; i++)
        {
            sum *= 26;
            sum += (characters[i] - 'A' + 1);
        }
        return sum;
    }

1
我不喜欢在Char上使用++,仅此而已^^ 并且A = 65,Z = 90 a = 97,z = 122 像你想要的Char ++并不只给你字母,还有像[ ^ ¨ , ;这样的符号。 所以,如果你想要字母,就必须限制范围。 如果你想要类似Excel列名的代码,请使用我上面提供的代码。 - kerrubin
是的,我知道,但我只使用了其中的30个,所以我想应该可以工作。 - Loj
小心: 90 'Z' 91 '[' 92 '\' 93 ']' 94 '^' 95 '_' 96 '`' 97 'a' 如果你使用30到字符A(65),你将使用到字符95。 - kerrubin
谢谢。我从A开始,并且有30次迭代,使用++操作符,所以我猜应该不会有问题。 - Loj
这些是很棒的函数。谢谢分享! - Camille Sévigny

23
如果你对所得到的结果感到满意,那就没问题了。
通常我看到这样的问题时,他们想要从“Z”换行到“AA”或者 Excel 的列等类似的东西。显然,只递增一个字符不会做到这一点,因为它会变成“[”。
另外,在单个字符内部,有效值的范围可能是非连续的-明显的例子是十六进制。如果你递增“9”,你会得到“:”,而不是你可能想要的“a”或“A”。期望的顺序很少是“无论Unicode给你什么”。

1

可能是因为它也打算从Z到AA,就像Perl和PHP一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接