一个长度不固定的字符串,将其按8个字符长度划分成多个字符串,每个字符串取后4位,如果最后一个字符串长度不是8,则在后面添加数字达到8位长度,长度7位的话最后一个加8,其他长度第一个加8其余的加0,同样取后四位,然后把取到的所有数据加到一起 
哪位大侠帮帮忙用.net 实现,希望能给个思路 效率想高一些 不要有太多的循环里面。

解决方案 »

  1.   

    string s="",str="";
    while(s.Length>8)
    {
     str+=s.SubString(0,8)+",";
     s=s.SubString(8);
    }
    str+=s.Length==7?s+"8":s+"8"+s.PadRight(7-s.Length,'0');
      

  2.   

    bool b = false;
    int len=0;
    if(str.length%8==0)//是否为8的倍数
    {
    len=str.length/8;
    b=true;
    }
    else
    {
    len=str.length/8+1;
    }
    string s="";
    for(int i=0,j=0;i<str.length;j++,i+=8)
    {
    if((j+1)==len && !b)//如果最后一个不是长度为8
    {
    s=str.substring(i,8).substring(4,4);
    }
    else
    {
    s=str.substring(i,8).substring(4,4);
    }
    },只是一个思路,或许有代码错误的地方,你看看吧,我现在有些事情,实在没时间一一做出
      

  3.   

    wuyq11 大虾做法就可以勒在右边填充固定长度就用PadRight勒第一个参数是长度 第二个参数是填充元素 
      

  4.   


    他的思路就不错,我只建议把string改成  StringBuilder类型
    另外楼主没说被截下来的那4个字符做什么用,这个自然也决定是存数组还是存哪
    str+=s.Length==7?s+"8":s+"8"+s.PadRight(7-s.Length,'0');
      

  5.   

    不知道大家有没关注过这个.net资源网,里面有大量视频教程
    http://www.zixueit.com/forum-29-1.html
      

  6.   


       private string Cal(string p)
            {
                String result = String.Empty;
                Int32 startIndex = 0;
                Int32 len = 8;
                while (true)
                {
                    String subStr = p.Substring(startIndex);
                    if (subStr.Length >= 8)
                    {
                        subStr = p.Substring(startIndex, len); ;
                    }
                     
                    if (subStr != String.Empty)
                    {
                        if (subStr.Length < 7 && subStr.Length>0)
                        {
                            subStr += "8";
                            subStr=subStr.PadRight(8, '0');
                        }
                        result += subStr.Substring(4);
                        startIndex = startIndex + len;
                        if (startIndex > p.Length)
                        {
                            break;
                        }
                    }
                    else
                    { break; }
                }
                return result;
            }
    String result = Cal("ssssssssddddd");
    Response.Write(result);
      

  7.   

    StringBuilder  PadRight 楼上说的很清晰啊 wuyq11 的方法就已经很好了。或者试试递归也行
      

  8.   

    string s="",str="";
    while(s.Length>8)
    {
     str+=s.SubString(0,8)+",";
     s=s.SubString(8);
    }
    str+=s.Length==7?s+"8":s+"8"+s.PadRight(7-s.Length,'0');简单明了!
      

  9.   

    再给你提供一个: private string Cal1(string p)
            {
                String result = String.Empty;
                Int32 strLen = p.Length;
                Int32 len=8;
                Int32 quotient=strLen/len;
                Int32 begin=0;
                Int32 remainder=strLen %len;
                while (quotient > 0 && begin<=quotient-1)
                {
                    result += p.Substring(begin*len + 4,4);
                    begin++;
                }
                if (remainder > 0)
                {
                    result += (p.Substring(begin * len) + "8").PadRight(8, '0').Substring(4);
                }
                return result;
            }
    String result = Cal1("ssss");
                Response.Write(result);
      

  10.   

    用循环:
    string s="",str="";
    while(s.Length>8)
    {
     str+=s.SubString(0,8)+",";
     s=s.SubString(8);
    }
    str+=s.Length==7?s+"8":s+"8"+s.PadRight(7-s.Length,'0');