/*获取母字符串长度(strLen)、子字符串长度(subStrLen),若strLen >=subStrLen,遍历母字符串各个元素
*遍历母串各个字符,从i:0-strLen,str[i];遍历子串各个字符,从j:0-subStrLen,subStr[j],比较str[i] 是否等于subStr[j],
*且str[i+1] == subStr[j],。。。。。。 ,且str[i+subStrLen-1] == subStr[j+subStrLen-1]...若都相等,则重置j从下标从零开始。
*若str[i] != subStr[j],将str[i]赋值给strTmp.
*/
/*函数功能:将一个母字符串(str)中去除不需要的子字符串(substr)
* create by hardysong
* date : 20170725
char * modifyStr(char *str, char *subStr){
int i,j,k,strLen ,subStrLen;
strLen = strlen(str);
subStrLen = strlen(subStr);
char *strTmp = (char *)malloc(sizeof(char)*strLen);
//strcpy(tmpstr,str);
if(0 == subStrLen){//母、子字符串为空的判断
printf("子字符串为空。");
return str;
}else if(strLen >=subStrLen ){//strLen大于等于subStrLen的情况
i=0;
j=0;
k = 0;
while(str[i] != '\n' && str[i] != '\0' ){
if(str[i] != subStr[j]){//母串中的字符和子串中字符不相等时
//母串中的有效的字符赋值给strTmp变量。
strTmp[k++] = str[i];
}else{
while(subStr[j] != '\0' ){//j的值小于子串的下标
if(str[i] != subStr[j]){
strTmp[k++] = str[i];
}else{
i++;
j++;
continue;
}
}
//重置j的值
if(j == subStrLen){
j = 0;
i --;//避免多加一次的情况
}
}
i++;
}
}else{//子字符串长度必须小于母字符串。
printf("子字符串长度必须小于母字符串。");
return str;
}
//最后一个字符赋值为'\0'
strTmp[k++] ='\0';
return strTmp;
}
int main(int argc, char* argv[])
{
int ret = 0;
int i =0;
char *str = "aastrbbstrccstrdd";
//正确结果:aabbccdd
int strLen = strlen(str);
char substr[20] = "str";
char *strTmp = (char *)malloc(sizeof(char)*strLen);
strTmp = modifyStr(str,substr);
printf("变换后的字符串strTmp=%s\n",strTmp);
return 0;
}