C语言实现一个长字符串中去除多次出现短字符串的功能


/*获取母字符串长度(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;


}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值