用这个
s.Remove(parm1,parm2);
parm1是要移除字符在s中的起点,parm2为要移除得字符数
返值就是s中剩下的字符

解决方案 »

  1.   

    我还要可以还原啊,用s.Remove(parm1,parm2);怎么还原,
      

  2.   

    我有个想法,讲出来请您不要笑俺哦:)如果都是英文字母(当然其他字符也可,只不过计算方法修改一下),我们可以用0代表a,用25代表z,用26代表A,用51代表Z,把0~51称为字母的压缩码,那么我的压缩办法是:intSum = C0*64^0+C1*64^1+C2*64^2+...(其中Cx为第x个字母的压缩码),"opkkd"有5个字母,intSum的最大值为64^4=16777216(实际上不可能达到这么大),正好是256^3,所以至少可以压缩成3位,这里还没有考虑对两个k的处理,当然怎么来存储以及怎么来解压,我想不是什么难题:)请多多指教。
      

  3.   

    http://search.csdn.net/Expert/topic/2587/2587811.xml?temp=.6048242
      

  4.   

    hhshh(蜀山浪子),你这个方法应该不可以,你怎么解压啊?没有C0.c1.你怎么把他转换回来
    这是不行的把?
      

  5.   

    hhshh(蜀山浪子)的方法可行的哦,
    前提是只有字符串A-Z,这样的话,算上大写小写,总共只有52个字符
    而6个bit位可以表示64个字符!(所以还可以算上数字符号)
    也就是,0~5位表示第一个字符,6~11位表示第二个字符,and so on
    -----------------------
    |0~5|6~11|……|24~29|  |
    -----------------------
    所以32位可以表示5个char
    就是,4个char可以压缩为5个char
    解压缩就很明了了是吧??
      

  6.   

    还是不太明白,intSum = C0*64^0+C1*64^1+C2*64^2+...(其中Cx为第x个字母的压缩码),他把这个加起来是什么意思啊?在讲清楚点啊
      

  7.   

    能说一下你压缩他的意义吗?如果是为了保密,.net中有加密算法呀?
      

  8.   

    技术细节可以如下:定义一个uint型数组A[]
    先使A[] = A[] & 0  //将A清0接着根据字符串,将其转换到A[]里
    (此时A里保存的是值小于64的数据,具体的转换根据你自己的定义)接着就是
    for(i = 0; i < Length; i++)
    {
       result |= A[i] >> i*6
    }
      

  9.   

    看样子还要把字符串的转换也给出来……
    最简单的
    for(i;;)
    {
       swith(tmp)  //tmp 为要转换的字符
       {
          case 'a':
             A[i] = 1; //具体等于什么你自己定义
             break;
          case 'b':
    ……
       }
    }
      

  10.   

    result |= A[i] >> i*6,这个应该不行吧,你怎么解压,这个是可以压缩,但不可以还原啊,右移不行的
      

  11.   

    不好意思,回帖后一直没时间来解释我思路,我给出一段程序,已经经过调试,但要说明:
    1、仅对英文字母有效;
    2、为了简单明了,仅压缩"opkkd",如果要实现通用性,需要修改程序,但可能程序比较长,这里主要是想说明我的压缩思路;//压缩函数,传入待压缩的字符串,返回经压缩后的byte数组
    private byte[] ZipString(string str)
    {
    int intTmp = 0;
    byte[] bytTmp = new byte[4];  //为了简单,直接定长
    byte[] bytS = Encoding.Default.GetBytes(str);
    for(int i = 0;i < bytS.Length;i++)
    {
                       //移位操作,实现公式intSum = C0*64^0+C1*64^1+C2*64^2+...
    intTmp = intTmp + (bytS[i] - 65) * (1 << (i*6)); 
    }          //把压缩好的数据放入byte数组
    int j = 0;
    while(intTmp > 0)
    {
    bytTmp[j++] = Convert.ToByte(intTmp % 256);
    intTmp = intTmp / 256;
    }
    return bytTmp;
    }//解压与压缩相反
    private string UnZipString(byte[] bytS)
    {
    string strTmp;
    byte[] bytTmp = new byte[6];  //为了简单,直接定长
    long intTmp = 0;
    for(int i = 0;i < bytS.Length;i++)
    {
    intTmp = intTmp + Convert.ToInt32(bytS[i] * (1 << (i*8)));
    }
    int j = 0;
    while(intTmp > 0)
    {
    if(intTmp < 64)
    {
    bytTmp[j] = Convert.ToByte(intTmp + 65);
    }
    else
    {
    bytTmp[j] = Convert.ToByte(intTmp % 64 + 65);
    }
    intTmp = intTmp / 64;
    j++;
    }
    strTmp = Encoding.Default.GetString(bytTmp);
    return strTmp;
    }
    程序涉及的面比较窄,我仅仅想说明一下我压缩思路。TO:tear_pearl(tear_pearl) 
    多谢您的支持和理解:)
      

  12.   

    测试例子:string str = "opkkd";
    byte[] bytTest = ZipString(str);
    string str1 = UnZipString(bytTest);可以看一下压缩后的bytTest数组占用的存储空间仅3个字节;经过解压后的str1与压缩前的str一样:)如果有什么不妥之处敬请指出。
      

  13.   

    hhshh(蜀山浪子)和tear_pearl(tear_pearl),谢谢你们哦,真是厉害啊
    佩服佩服。虽然现在我们不用压缩了,但还是谢谢你们哦,我们现在只压缩数字的,
    呵呵。
    hhshh(蜀山浪子),你的想法很好,但表示出来确实很是困难啊。呵呵