我想创建一个函数,首先按长度排序,然后按字母顺序列出字符串。我试着这样做
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;
}
关于c# - 如何在 C# 中创建一个按给定顺序返回下一个字符串的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48050727/