问题
目前,下面的代码(IntToAZString)有点做,但不是100%,我从IRC(Heisenberg)的某个人那里得到了这段代码。
现在的问题是它以字符串长度1开始,然后移动到2直到它达到3,当它出现时,它从BAA开始......
它应该从AAA开始,但它对应于000,它不喜欢做,ZZ是99,BAA是100 ......
我希望它计数到Z,我希望能够定义字符串长度(我有点解决了..)
我想要实现的目标
字符串长度:3 所以,AAA。
首先,最后一个角色的A到Z,当它击中Z时,将中间角色向上移动一个字母(ABA) 重复最后一个字符,再次移动中间字符。 如果中间的一个到达Z,则将第一个移到字母表中的一个字母。
当生成的字符串与页面上的字符串匹配时结束(AOE) 或当它到达ZZZ时。
当前代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CharCounter
{
public partial class Form1 : Form
{
private bool ogFound = false;
private int chars;
static string IntToAZString(long number)
{
string result = "";
do
{
long remainder = number % 26;
char digit = (char)(remainder + 65);
result = digit + result;
number /= 26;
}
while (number > 0);
return result;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < (Math.Pow(26, chars)); i++)
{
listBox1.Invoke((MethodInvoker)delegate
{
listBox1.Items.Add(IntToAZString(i));
});
}
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
chars = (int)numericUpDown1.Value;
}
}
}
答案 0 :(得分:0)
你的代码很好,但你忘记了在你的代码中,'A'相当于0.所以“B”相当于“AB”,而“AAB”(就像1,相当于01和001)。
您的输出就像:
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10, (there is no 00 before 10)
...
打印时,应使用'A's:
将输出字符串填充到所需的长度listBox1.Items.Add(IntToAZString(i).PadLeft(chars, 'A');
如果您愿意,可以从1个字符输出打印,然后打印2个字符输出(填充'A'),然后输出3个字符(用'A'填充)等等......
另一个建议 - 在StringBuilder
方法中使用string
代替IntToAZString
:
static string IntToAZString(long number)
{
StringBuilder result = new StringBuilder(chars);
do
{
long remainder = number % 26;
char digit = (char)(remainder + 65);
result.Insert(0, digit);
number /= 26;
}
while (number > 0);
return result.ToString();
}
答案 1 :(得分:0)
我使用了递归方法来做同样的事情。
public class Main{
static char s[]=new char[26];//Char array to store Set of alphabets
public static void main(String args[]){
long size=1;
char ch='a';
for(int i=0;i<26;i++) //Loop to add alphabets to Char array s[]
{
s[i]=(char)(ch+i);
}
while(true) //infinite loop which increases size of the string.
{ recursion(size,"");
System.out.println("");
size++;
}
}
public static void recursion(long size,String prefix)//Recursive method
{
// Base case: size is 0, print prefix
if(size==0)
{ System.out.println(prefix);
return;
}
// One by one add all characters from set and recursively
// call for size equals to size-1
for(int i=0;i<26;i++)
{
// Next character of input added
String newPrefix = prefix + s[i];
// Size is decreased, because we have added a new character
recursion(size-1,newPrefix);
}
}
}