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

来源:互联网 发布:ibatis sql注入 编辑:程序博客网 时间:2024/05/10 18:26
/*获取母字符串长度(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 : 20170725char * 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";//正确结果:aabbccddint 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;}




阅读全文
0 0
原创粉丝点击