在字符串中删除特定字符

第一种方法:遍历原数组,在待删数组里遍历是否删除该元素

char* removeChars(char str[], const char remove[]) {
    int len = strlen(str);
    char *temp=new char[len];
    int i = 0, j, count = 0;
    bool state = true;
    while (str[i] != '\0') {
        for (j = 0; j < strlen(remove); ++j) {
            if (str[i] == remove[j]) {
                state = false;
            }
        }
        if (state)
            temp[count++] = str[i];
        state = true;
        i++;

    }
    temp[count] = '\0';
    return temp;
}

第二种方法:时间复杂度O(n),先把待删数组元素映射到ASCII码数组上,直接在遍历原数组,看遍历到的元素是否在ASCII码数组上(省略了待删数组的遍历),接下来是重点(删除原数组中包含的待删数组中的元素):用两个指针(这里指数组下标,src和dst分别指向当前遍历元素和某字符最终移动到的位置),src肯定是一直前进的,dst在当前元素不在待删数组中时前进。

void removeChars1(char str[], const char remove[]){
    int remaveArrays[256];
    int i,src=0,dst=0;
    for (i = 0; i < 256; ++i) {
        remaveArrays[i] = 0;
    }
    for (i = 0; remove[i]!='\0'; ++i) {
        remaveArrays[remove[i]]  = 1;
    }
//    do{
//        if (remaveArrays[str[src]]==0){//不要删除
//            str[dst] = str[src];
//            dst++;
//        }
//        src++;
//    }while (str[src]!='\0');
    while (str[src]!='\0'){
        if (remaveArrays[str[src]]==0){//不要删除
            str[dst] = str[src];
            dst++;
        }
        src++;
    }
    str[dst] = '\0';
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值