V1.0
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
#include<memory.h>
void Delete_specific_char(char * str1, char * str2)
{
char * phash = (char *)malloc(sizeof(char)*256);
assert(phash);
memset(phash, 0, 256);
int i = 0;
while(str2[i] != '\0' )
{
phash[str2[i++]] =1;
}
int newp = 0;
i = 0;
while(str1[i] != '\0' )
{
if(phash[str1[i]] ==1)
{
i++;
}
str1[newp++] = str1[i];
i++;
}
str1[newp ] ='\0';
free(phash);
}
int main()
{
char a1[] = "they are student.";
char a2[] = "aeiou";
Delete_specific_char(a1, a2);
printf("%s",a1);
printf("%s\n",a2);
return 0 ;
}
之前的
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#include <memory.h>
void Delete_specific_char(char * str1, char * str2)
{
assert(str1);
assert(str2);
char * phash = ( char * )malloc( sizeof(char)*256 );//先将str2在phash中映射一遍
memset(phash,0,256);
int i = 0;
while ( str2[i] != '\0')
{
phash[str2[i]] = 1;
i++;
}
char * fast = str1; //这个指针用来扫描str1
char * slow = str1; //这个指针用来修改str1,存放的是下一个待修改的位置
int j = 0;
while (fast[j]!= '\0') //开始扫描str1
{
if (phash[*fast] != 1) //如果fast所指向的字母在str2中没有,fast,slow就都指向下一个
{
*slow =*fast;
fast++;
slow++;
}
else //如果fast所指向的字母在str2中存在,那么fast指向下一个
{
fast++;
while (phash[*fast])//继续扫描,把连续的在str2中的字符都跳过,直到找到一个非str2中的字符
{
fast++;
}
*slow = *fast; //将那个非str2的字符赋给slow当前所指向的字符
slow++; //继续扫描,
fast++;
}
}
*slow = '\0';
free(phash);
}
int main( )
{
char a1[] = "they are student. ";
char a2[] = "aeiouac";
Delete_specific_char(a1, a2);
int i = 0;
while (a1[i] !='\0')
{
printf("%c",a1[i]);
i++;
}
printf(":\n");
return 0;
}