我想在 C# 中生成顺序字母。
例如,变量的第一个值是“a”,然后是“b”、“c”、... 在“z”之后,范围将继续为“aa”、“bb”、...
就像是
i=0;
while(i<40)
{
Console.WriteLine(i);
i++;
}
但使用字母。
您可以增加一个字符,就像您可以增加一个整数一样。
char c = 'a';
while(c <= 'z')
{
// Do something with c
c++;
}
注意,我只是把它掀了起来。我没试过。
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。您不必努力工作或存储中间结果。
既然你已经添加了一个新的作业标签,我不会给你直接的答案,但我会给你一个正确方向的观点。就像 Florian Greinacher 所说,您可以像计算数字一样“计算” ascii 字符(实际上,我认为可以,我从来没有用 C# 做到这一点。强类型允许吗?)。
使用 Florian 的建议,但要跟踪完成 az 循环的次数,并通过更多迭代打印出更多副本。
你需要打印出诸如“ab”和“ba”之类的东西,还是只打印“aa”“aaa”等?
伪代码:
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
我将声明一个包含 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;
您可以将 int 转换为 char (就像这样)。
这样,您可以for
在 int 上使用循环。
您可以使用if
语句来检查您的 int 是否超过 z 的值,如果是,则从您的 int 中减去 z 的值,以找出有什么区别,您可以使用它来编写双字符。
我会建议你不要在字符上循环,因为一旦你通过'z'它可能会变得混乱。
这个问题适用于堆栈数据结构。每次增加一个字母时,要么增加顶部的项目,要么将其更改为“a”,然后更改下一个项目。如果找到基本字母并且是 az,则将其更改为 a,然后将 a 添加到堆栈中。
我不会给你代码。