所以,我正在尝试做这样的事情:(示例)
a,b,c,d ..等aa,ab,ac ..等ba,bb,bc等。
因此,这基本上可以解释为通常增加并且只是打印所有可能的变化,从a开始。到目前为止,我已经能够用一个字母来完成它,就像这样:
for (int i = 97; i <= 122; i++)
{
item = (char)i
}
但是,我最终无法添加第二个字母,第三个字母,等等。有人能提供输入吗?感谢。
答案 0 :(得分:2)
由于到目前为止还没有一个解决方案可以实际上“增加一个字符串”,所以这里有一个:
static string Increment(string s) {
if (s.All(c => c == 'z')) {
return new string('a', s.Length + 1);
}
var res = s.ToCharArray();
var pos = res.Length - 1;
do {
if (res[pos] != 'z') {
res[pos]++;
break;
}
res[pos--] = 'a';
} while (true);
return new string(res);
}
这个想法很简单:假装字母是你的数字,并按照他们在小学教学的方式增加。从最右边的“数字”开始,然后递增它。如果你达到9(我们系统中是'z'
),请转到前一个数字;否则,你完成了递增。
显而易见的特殊情况是“数字”完全由9个组成。这是当你的“计数器”需要滚动到下一个尺寸时,并添加一个“数字”。在方法开头检查此特殊条件:如果字符串由N
个字母'z'
组成,则返回N+1
个字母'a'
的字符串。
答案 1 :(得分:0)
你的for循环的每次迭代都是完全的 覆盖“item”中的内容 - for循环只是一次分配一个字符“i”
如果item是String,请使用以下内容:
item = "";
for (int i = 97; i <= 122; i++)
{
item += (char)i;
}
答案 2 :(得分:0)
的影响
public string IncrementString(string value)
{
if (string.IsNullOrEmpty(value)) return "a";
var chars = value.ToArray();
var last = chars.Last();
if(char.ToByte() == 122)
return value + "a";
return value.SubString(0, value.Length) + (char)(char.ToByte()+1);
}
你可能需要将char转换为一个字节。这可以封装在像static int ToByte(this char)
;
构建大量字符串时,StringBuilder是更好的选择。所以你可能想考虑使用它而不是字符串连接。
答案 3 :(得分:0)
另一种看待这种情况的方法是你要计算在26中。计算机非常善于计算,因为它总是必须从基数2(二进制)转换为基数,这是它存储值的方式。 10(十进制 - 你和我一般认为的数字系统),转换到不同的数字基数也很容易。
这里有一个通用的基本转换器https://stackoverflow.com/a/3265796/351385,它将一个字节数组转换为一个任意的基数。一旦你对数字基础有了很好的理解并且能够理解这些代码,那么创建一个以二进制计数的基数26计数器是一件简单的事情,但是转换为基数26进行显示。