小函数集合

/*字符串翻转函数*/
char* Reverse(char* aStr)
{
    for (int i=0,j=strlen(aStr)-1;i<j;i++,j--)
    {
        aStr[i]^=aStr[j];
        aStr[j]^=aStr[i];
        aStr[i]^=aStr[j];
    }
    return aStr;
}

 

/*将source字符串中出现target字符串的位置都用replace字符串代替 */
int   replaceStr(char *source,char *target,char *replace)

  
    int   i   =   0,j =   0,k,tmp;
    int   targetLen   =   strlen(target),   /*   length   of   the   target   */
          replaceLen  =   strlen(replace),  /*   length   of   the   replace   */
          sourceLen   =   strlen(source);   /*   length   of   the   source   */
    
    if(targetLen  ==  replaceLen)
    {
        for(i = 0;i <= strlen(source) - targetLen;i++)
        {
              while   (source[i  +  j]  ==  target[j]  &&  j < targetLen)
                    ++j;
            if(j  ==  targetLen)    /*   found   target   in   source   */
            {  
                for(k  =  0;k  <  targetLen;k++)
                    source[i + k]  =  replace[k];
            }
            j=0;       /*   backtracking*/
        } 
    }
      else if(targetLen > replaceLen)
    {
        for(i  =  0;i < sourceLen;i++)
        {
            while(source[i + j] == target[j]   &&   j   <   targetLen) 
                    ++j;
            if(j == targetLen)
            {
                  for(k = 0;k < replaceLen;k++)
                      source[i  +  k]   =   replace[k];
                  tmp  =  i;   /*   hold   this   position   for   later   use   */
                  /*   the   erasing   loop   */
                  for(k  =  tmp  +  targetLen;k  <=  sourceLen;k++)
                  {
                    source[tmp  +  replaceLen]  =  source[k];   
                    tmp++;
                  }
            }
            j = 0;   /*   backtracking   */
        }
  }
  else
  {
          for(i = 0;i < strlen(source);i++)
          {
                while   (source[i + j] == target[j] &&   j < targetLen) 
                      ++j;
                if(j ==  targetLen)
                {
                  /*   get   space   for   the   shorter   */
                  for(k=strlen(source); k>=i+targetLen-2; k--)
                      source[k  +  replaceLen  -  targetLen]  =   source[k];
                  for(k  =  0;k  <  replaceLen;k++)
                          source[i   +   k]   =   replace[k];
                }
            j  =  0;   /*   backtracking   */
          }
  }
}

 

/*整型转换为字符串(windows下可以直接调用,linux下没有该函数,自己实现)*/

void _itoa(int i,char*string) {
    int power,j;
    j=i;
    for(power=1;j>=10;j/=10)
        power*=10;
    for(;power>0;power/=10) {
        *string++='0'+i/power;
        i%=power;
    }
    *string='/0';
}

 

 

/*

0-1背包部分代码
n个物品,背包大小为m ,v[]为每个物品的值,w[]为每个物品的大小(重量)
*/
int zeroonepack(int n,int m,int v[],int w[],int *maj)  
{
        for(int y=0;y<=m;y++)                        //初始化行为0
            maj[y]=0;       
        for(int i=1;i<=n;i++)                        //对于每个物品
            for(int j=m;j>=0;j--)                    
                if(w[i]<=j)
                    maj[j]=max(maj[j],maj[j-w[i]]+v[i]);   //最关键的状态转移方程
                else
                    maj[j]=maj[j];
        return maj[m];                  //返回最后一行最后一个值
}

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值