#include "dsstring.h"
#include <stdio.h>
#include <stdlib.h>
int getLen(const char *s)
{
int len = 0;
while (s[len++] != '\0')
;
return --len;//该部分获取字符串长度
}
int strCmp(const char *ptr1, const char *ptr2)
{
int i = 0;
while (ptr1[i] != '\0' || ptr2[i] != '\0')
{
if (ptr1[i] - ptr2[i] == 0 )
i++;//逐个比较字符串 1大于2 返回正值
else
return ptr1[i] - ptr2[i];
}
return 0;
}
int str_replace(const char *in, char *out, int outlen, const char *oldstr, const char *newstr)
{
int counter = 0;//计数器
int j = 0;//j用来表示 out的指针
int flag = 0;
for (int i = 0; in[i] != '\0'; i++)//遍历原数组
{
if (in[i] != oldstr[0])
{
out[j] = in[i];
j++;
outlen--;
continue;
}//当相等时 直接out输出当前的 in
else//不相等时
{
flag = 0;
for (int k = 0; oldstr[k] != '\0'; k++)
{
if (in[k + i] != oldstr[k])//不相等立即终止
break;
else
{
if (k == (getLen(oldstr) - 1))//直到比较完成 发现全部匹配时
{
int len = getLen(newstr) + getLen(in) - i - getLen(oldstr) + 1;
if (outlen >= len)
//旧的被新的替换后—当前位置+末尾/0仍未超出outlen最大值则
{
i += k;//i到当前位置
flag = 1;//remain space 留有剩下的空间
}
}
}
}//end of for
if (flag == 1)//flag==1 替换
{
counter++;
for (int k = 0; newstr[k] != 0; k++)
{
out[j] = newstr[k];
j++;
outlen--;
}
}
else//flag==0 no space remained
{
out[j] = in[i];
j++;
outlen--;
}
}
}
out[j] = 0;
return counter;
}