【问题标题】:Sequential letters in C#C#中的连续字母
【发布时间】:2011-05-09 18:29:00
【问题描述】:

我想在 C# 中生成连续字母。

例如,变量的第一个值是“a”,然后是“b”、“c”、... 在“z”之后,范围将继续为“aa”、“bb”、.. .

类似

i=0;
while(i<40)
{
   Console.WriteLine(i);
   i++;
}

但使用字母。

【问题讨论】:

  • 这是家庭作业吗?或者也许是一个面试问题?
  • 请发布您迄今为止尝试过的内容,以便我们帮助您改进现有代码 - 除非您自己尝试,否则您不会学习。
  • Eduarth,如果任何发布的答案解决了您的问题,您应该接受它(点击答案左侧的复选标记)。
  • 这个问题的公认答案是迄今为止我见过的最优雅的答案:in c#, how can i build up array from A to ZZ that is similar to the way that excel orders columns

标签: c# character sequences


【解决方案1】:

你可以增加一个字符,就像你可以增加一个整数一样。

char c = 'a';

while(c <= 'z')
{
     // Do something with c
     c++;
}

【讨论】:

    【解决方案2】:

    注意,我只是把它搞砸了。我没试过。

    for (int i=0; i<40; ++i)
    {
        char digit = (char) (97 + i%26);  // utf/ascii code 97 == 'a'
        Console.WriteLine(new String(digit, i/26 + 1));
    }
    

    String(char c, int n) 构造函数返回一个字符串,其中字符 c 重复 n 次。从那里,您只需要重复什么('a' 表示 0、26、52 等),以及重复多少次(1 表示 0、2 表示 26、3 表示 52 等)。

    另外请注意,i 可以是任何东西(嗯,任何正数)。我只是像你一样从0循环到40。您不必努力工作或存储中间结果。

    【讨论】:

      【解决方案3】:

      既然你已经添加了一个新的作业标签,我不会给你直接的答案,但我会告诉你正确的方向。就像 Florian Greinacher 所说,您可以像计算数字一样“计算”ASCII 字符(实际上,我认为可以,我从来没有用 C# 做到这一点。强类型允许吗?)。

      使用 Florian 的建议,但要跟踪完成 a-z 循环的次数,并通过更多迭代打印出更多副本。

      您需要打印出诸如“ab”和“ba”之类的内容,还是只打印“aa”“aaa”等内容?

      【讨论】:

      • @cHao,我怀疑这是问题中的错误...... OP 想要的看起来像 Excel 列号
      【解决方案4】:

      伪代码:

      Declare a base string
      Inialize base string to ""
      for each letter in alphabet
          print base_string + letter
          if(letter == last letter)
             base_string = base_string + letter
             letter = first letter
      
      next letter
      

      【讨论】:

        【解决方案5】:

        我将声明一个包含 26 个字符的数组,其中 [0] = a、[1] = b 等。然后,对于给定的整数,除以 26,并将商和模值存储为变量。答案将是位置 (mod-1) 处的元素,打印出 (quotient + 1) 次。下面的代码并不完美;您可能必须使用演员表才能使整数发挥得很好。另外,我在本示例中使用数字 92,但您可以使用任何(数字)...

        string[] letters = {'a', 'b', ... };
        int number = 92;
        int quotient = number / 26; // answer is 3
        int mod = number % 26; // answer is 14
        string answer = "";
        
        for (int i = 0; i <= quotient; i ++) {
            answer += letters[mod - 1];
        }
        
        return answer;
        

        【讨论】:

        • 比它必须的有点混乱,但还不错。 :) 但是,如果您使用 92 作为示例,我建议使用变量 (number) 而不是文字。使步骤更明显。
        • 你说得对@cHao,我声明了(数字),但后来忘记引用它。我现在已经编辑过了。谢谢
        【解决方案6】:

        您可以将 int 转换为 char(如 so)。
        这样您就可以在 int 上使用 for 循环。
        您可以使用if 语句来检查您的 int 是否超过 z 的值,如果是,则从您的 int 中减去 z 的值,找出有什么区别,您可以使用它来编写双字符。
        我会建议你不要在字符上循环,因为一旦你通过 'z' 可能会变得混乱。

        【讨论】:

          【解决方案7】:

          这个问题非常适合堆栈数据结构。每次增加一个字母时,要么增加顶部的项目,要么将其更改为“a”,然后更改下一个项目。如果找到基本字母并且它是 z,则将其更改为 a,然后将 a 添加到堆栈中。

          我不会给你代码。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-02-26
            • 2018-11-20
            • 1970-01-01
            • 1970-01-01
            • 2016-09-02
            • 2021-06-26
            • 2020-04-08
            相关资源
            最近更新 更多