C/C++笔试题之删除字符串中某些字符

本文探讨如何删除C/C++字符串中指定字符的问题,提供三种方法,包括基本思路、减少移动次数及利用哈希函数优化的解决方案。以实例str1='aaabbbaaacccddd'和str2='ac'说明,删除操作后得到'bbbddd'。
摘要由CSDN通过智能技术生成

问题描述:删除字符串1中所有的在字符串2中出现的字符。例如,str1="aaabbbaaacccddd",str2="ac",删除操作后"bbbddd"。

最简单的方法1的思路:对所有str2中的字符,依次取出一个字符,并在str1中扫描所有出现的相同字符,每当遇到一个相同字符时,当前字符后的所有字符从前到后都向前移动一个单位。

方法2:减少移动的次数。

#include<stdio.h>
void deleteLetters(char str[], char letters[]) {
	for(int i=0; letters[i]; i++) {
		char letter=letters[i];
		for(int j=0,k=0; str[j]; j++)
			if(str[j]!=letter) { str[k++]=str[j]; }
		str[k]=0;
	}
}
int main(void) {
	char a[100], b[10];
	gets(a);
	gets(b);
	deleteLetters(a, b);
	puts(a);
	return 0;
}

方法3:减少移动的次数,并引入哈希函数取消扫描。

#in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值