2

我想在 C# 中生成顺序字母。

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

就像是

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

但使用字母。

4

7 回答 7

6

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

char c = 'a';

while(c <= 'z')
{
     // Do something with c
     c++;
}
于 2011-05-09T18:33:21.790 回答
3

注意,我只是把它掀了起来。我没试过。

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)函数返回一个字符串,其中 char c 重复 n 次。从那里,您只需要重复什么('a' 表示 0、26、52 等),以及重复多少次(1 表示 0,2 表示 26,3 表示 52 等)。

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

于 2011-05-09T18:41:55.147 回答
1

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

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

你需要打印出诸如“ab”和“ba”之类的东西,还是只打印“aa”“aaa”等?

于 2011-05-09T18:40:33.853 回答
0

伪代码:

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
于 2011-05-09T18:43:06.257 回答
0

我将声明一个包含 26 个字符的数组,其中 [0] = a、[1] = b 等。然后,对于给定的整数,除以 26,并将商和 mod 值存储为变量。答案将是位置 (mod-1) 处的元素,打印出 (商 + 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;
于 2011-05-09T18:45:58.980 回答
-1

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

于 2011-05-09T18:42:39.190 回答
-1

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

我不会给你代码。

于 2011-05-09T19:16:27.710 回答