不断增加字符串

时间:2012-07-09 20:37:11

标签: c#

所以,我正在尝试做这样的事情:(示例)

a,b,c,d ..等aa,ab,ac ..等ba,bb,bc等。

因此,这基本上可以解释为通常增加并且只是打印所有可能的变化,从a开始。到目前为止,我已经能够用一个字母来完成它,就像这样:

for (int i = 97; i <= 122; i++)
{
    item = (char)i
}

但是,我最终无法添加第二个字母,第三个字母,等等。有人能提供输入吗?感谢。

4 个答案:

答案 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'的字符串。

这是link to a quick demonstration of this code on ideone

答案 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进行显示。