就像excel中的列标记一样,先从A开始,到Z,然后接下来是AA,AB...ZZ,AAA...ZZZ这样一直下去.现在我有string s,想让s这样增加下去,求一算法.谢谢!

解决方案 »

  1.   

    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 "";
    }
    类似!
      

  2.   

    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]++;
    }
    }
      

  3.   

    提供一個思路參考一下:
    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;
             }         
        }
    }
      

  4.   

    不是很明白楼主的意思,如果是构造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);
    }
        }
      

  5.   

    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;
    }
      

  6.   

    sqfeiyu(流星雨)的想法不错。有意思
      

  7.   

    这样效率最高。
    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);
    }
    }
      

  8.   

    刚才发的有不对,生成的是 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);
           }
    }