/*字符串翻转函数*/
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]; //返回最后一行最后一个值
}