求一简单算法,从A到ZZ...

cdo 2005-08-03 09:29:44
就像excel中的列标记一样,先从A开始,到Z,然后接下来是AA,AB...ZZ,AAA...ZZZ这样一直下去.

现在我有string s,想让s这样增加下去,求一算法.谢谢!
...全文
191 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ThinPig 2005-08-04
  • 打赏
  • 举报
回复
这样效率最高。
public string ShowString()
{
StringBuilder Temp=new StringBuilder(160);
try
{
for (int k=0;k<4;k++)
{
for (int i=(int)'a';i<=(int)'z';i++)
{
for (int j=0;j<k;j++)
{
Temp.Append((char)i);
}
}
}
return Temp.ToString();
}
catch (Exception e)
{
throw new ExternalException(e.Message);
}
}
ThinPig 2005-08-04
  • 打赏
  • 举报
回复
刚才发的有不对,生成的是 A..Z,AA,BB,CC...ZZ,AAA,BBB,CCC....ZZZ
我想楼主的意思是:A..Z,AA,AB,AC,AD...ZZ,AAA,AAB,AAC...AAZ,ABA,ABB,ABC,ABD..ABZ...ZZZ 吧。如果不需要太多的灵活性这样写就可以了,简单效率又高。

public static string ShowString()
{
StringBuilder Temp = new StringBuilder(18278);
try
{
for (int k = 0; k < 4; k++)
{
for (int i = (int) 'a'; (i <= (int) 'z') && (k >= 0); i++)
{
if (k.Equals(0)) Temp.Append((char) i);
for (int l = (int) 'a'; l <= (int) 'z' && (k >= 1); l++)
{
if (k.Equals(1))
{
Temp.Append((char) i);
Temp.Append((char) l);
}
for (int j = (int) 'a'; j <= (int) 'z' && (k >= 2); j++)
{
if(k.Equals(2))
{
Temp.Append((char) i);
Temp.Append((char) l);
Temp.Append((char) j);
}
}
}
}
}
return Temp.ToString();
}
catch (Exception e)
{
throw new ExternalException(e.Message);
}
}
落伍者 2005-08-03
  • 打赏
  • 举报
回复
sqfeiyu(流星雨)的想法不错。有意思
quicklight 2005-08-03
  • 打赏
  • 举报
回复
so easy a:

private string GetCode(string prev)
{
if(prev == null || prev == "")
return "A";
char last = prev[prev.Length - 1];
if(last < 'Z')
prev = prev.Substring(0, prev.Length - 1) + (char)(last + 1);
else
{
prev = prev.Substring(0, prev.Length - 1) + "AA";
}
return prev;
}
shrinerain 2005-08-03
  • 打赏
  • 举报
回复
不是很明白楼主的意思,如果是构造a,b...z;aa,bb..zz;aaa,bbb..zzz;这种字符串的话见下面

int strLength=3;
for(int i=0;i<strLength;i++)
{
for(int myChar=65;myChar<=90;myChar++)
{
string originStr=null;
for(int m=0;m<=i;m++)
originStr+=(char)myChar;
Console.WriteLine(originStr);
}
}
sqfeiyu 2005-08-03
  • 打赏
  • 举报
回复
提供一個思路參考一下:
class NumStr:
{
private int num;
private string str;
public NumStr()
{
num=1;
str="A";
}
public string STR
{
get{return str;}
set
{
str=val;
StrToNum();
}
}
public string add(int i)
{
num +=1;
if(num%26==0) num+=1;
NumToStr();
return str;
}
private void StrToNum()
{
int n=str.length;
num=0;
for(int i=0;i<n;i++)
{
num += ((int)str[i]-64)*(int)System.Math.Pow(26,(n-i-1))
}
}
private void NumToStr()
{
int n=1;
int m=num;
str=""
while(n<m)
{
int t=m/26;
int y=m%26;
str= (char)(y+65) + str;
if(y==0)
m =m-26;
else
m=t*26;
}
}
}
abiho 2005-08-03
  • 打赏
  • 举报
回复
int count=0;
private void Begin()
{
int len=3;
Console.WriteLine(string.Format("开始,字符长度为{0},时间{1}\r\n",
len,DateTime.Now.ToString("HH:mm:ss.fffffff")));
byte[] result=new byte[len];
for(int i=0;i<len;i++)
{
result[i]=0x40;
}

while(true)
{
this.NextResult(result,len);
if(result[0]<0x5B)
{
this.PrintResult(result);
}
else
{
break;
}
}
Console.WriteLine(string.Format("结束时间:{0}\r\n",
DateTime.Now.ToString("HH:mm:ss.fffffff")));
}

private void PrintResult(byte[] result)
{
int i=0;
for(;result[i]<0x41;i++);

string str=System.Text.Encoding.ASCII.GetString(result,i,result.Length-i);
Console.Write(str+" ");
if(count>=25)
{
Console.Write("\r\n");
count=0;
}
else
count++;
Application.DoEvents();
}

private void NextResult(byte[] result,int len)
{
this.BytePlusOnce(result,len-1);
}

private void BytePlusOnce(byte[] result,int i)
{
if(i>0)
{
if(result[i]<0x5A)
{
result[i]++;
}
else
{
result[i]=0x41;
BytePlusOnce(result,i-1);
}
}
else
{
result[i]++;
}
}
cdo 2005-08-03
  • 打赏
  • 举报
回复
thx
sequelbo 2005-08-03
  • 打赏
  • 举报
回复
private string GetCode(string Father,string End)
{
if(Father==End)
{
return Father+"_"+"A";
}
string []Abc=new string[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
string Ez=End.Remove(0,End.Length-1);
if(Ez=="Z")
{
return End.Remove(End.Length-1,1)+"AA";
}
else
{
for(int i=0;i<Abc.Length;i++)
{
if(Ez==Abc[i])
{
return End.Remove(End.Length-1,1)+Abc[i+1];
}
}
}
return "";
}
类似!
cdo 2005-08-03
  • 打赏
  • 举报
回复
怎么没人进来看看呀.
wingnal 2005-08-03
  • 打赏
  • 举报
回复
很简单的一个函数,写一下不就完了,自己动手阿,呵呵

cdo 2005-08-03
  • 打赏
  • 举报
回复
thx

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧