求一简单算法,从A到ZZ... 就像excel中的列标记一样,先从A开始,到Z,然后接下来是AA,AB...ZZ,AAA...ZZZ这样一直下去.现在我有string s,想让s这样增加下去,求一算法.谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 ""; }类似! 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]++; } } 提供一個思路參考一下: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; } }} 不是很明白楼主的意思,如果是构造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); } } 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; } sqfeiyu(流星雨)的想法不错。有意思 这样效率最高。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); }} 刚才发的有不对,生成的是 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); }} 如何批量执行并替换字符串?字符串中含有多个数字要求计算。 c# 图片缩小成小图片问题 如何设置和获取实体类的主键、表名, 输入两个长整型数字利用字符串方式相加? 关于程序不间断运行 C#启动sql2005服务器? dataGridView 数据绑定后 如何修改datatable某列,选定行数的值,写的这写不来了 c#中的异步读取文件的问题 如何用C#寫COM+ 在線等。。 编译通不过:常数中有换行符!如何解决! 有问题求教大家
{
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 "";
}
类似!
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]++;
}
}
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;
}
}
}
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);
}
}
{
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;
}
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);
}
}
我想楼主的意思是: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);
}
}