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

来源:互联网 发布:理财分红天天系统源码 编辑:程序博客网 时间:2024/06/05 17:10

问题描述:删除字符串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:减少移动的次数,并引入哈希函数取消扫描。

#include<stdio.h>int main(void) {int i, j;int hashtable[256]={0};char str[100], substr[10];gets(str);gets(substr);for(i=0; substr[i]; i++) {hashtable[substr[i]]=1;}for(i=j=0; str[i]; i++) {if(hashtable[str[i]]!=1) {str[j]=str[i];j++;}}str[j]=0;puts(str);return 0;}

0 0
原创粉丝点击