c# - 如何在 C# 中创建一个按给定顺序返回下一个字符串的函数

标签 c#

我想创建一个函数,首先按长度排序,然后按字母顺序列出字符串。我试着这样做

 public static string nextstring(string s) {
     String next = ((char)(s[0] + 1)).ToString();
     return next;
 }

但是我如何修改代码以使其适用于更长的字符串?我的目标是按顺序打印所有字符串,如 a、b、c、...、z、aa、ab、ac、...、az、ba、...、zz、aaa...

最佳答案

首先,考虑一下递增十进制数的算法:

  • 您要做的第一件事是增加最低有效数字
  • 如果增量后的数字值低于十,则完成
  • 如果值为 10,则将该数字设置为零,然后递增下一个较高的数字
  • 如果没有要增加的下一个更高数字,请在数字前面插入 1

你的字符串可以被认为是 26 进制系统中的数字,有轻微的扭曲(没有零)。您从最后一个字母的增量开始;如果结果超过'z',则返回'a',并移至下一个字母;如果您用尽了所有字母,请在值前面插入 'a'

以下是此方法的一种可能实现:

static string Increment(string s) {
    var chars = s.ToCharArray();
    int carry = 1;
    var i = s.Length-1;
    while (i >= 0) {
        chars[i] += (char)carry;
        if (chars[i] <= 'z') {
            carry = 0;
            break;
        }
        chars[i] = 'a';
        carry = 1;
        i--;
    }
    var res = new string(chars);
    return (i == -1 && carry != 0) ? "a"+res : res;
}

Demo.

关于c# - 如何在 C# 中创建一个按给定顺序返回下一个字符串的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48050727/

相关文章:

c# - 全为 0x00 的字节数组等于 0x08?

c# - ISynchronizeInvoke vs SynchronizationContext vs mainForm.Invoke

c# - ASP.NET Core 在 Forbid() 上给我代码 500

c# - WinRT 将 Jpg 或 PNG 转换为 GIF

c# - 创建和运行测试

c# - 准确设置MySqlCommand参数大小

C# 从类列表中提取字段列表

c# - 关于如何使用类似插件的体系结构实现 c# 主机应用程序的问题

c# - Getter 属性在没有任何人调用的情况下运行

c# - 经过身份验证的调用