转自:http://www.cnblogs.com/tolimit/p/4202959.html
/************************************************************************* > File Name: test.c > Author: ToLiMit > Mail: 348958453@qq.com > Created Time: Sun 04 Jan 2015 06:20:05 PM PST ************************************************************************/ #include<stdio.h> void delete_str_char (char * main_str, char * sub_str) { if ((main_str == NULL) || (sub_str == NULL)) return; char * sub_index = sub_str; char * main_index = main_str; char bitmap[32] = {0}; char * str = (char *)malloc (strlen (str) + 1); char * index = str; memset (str, 0, strlen (str) + 1); while (*sub_index != '\0') { char suffix = ((*sub_index) / 8) - 1; char offset = (*sub_index) % 8; bitmap[suffix] |= (0x1 << (8 - offset)); sub_index++; } while (*main_index != '\0') { char suffix = ((*main_index) / 8) - 1; char offset = (*main_index) % 8; if ((bitmap[suffix] & (0x1 << (8 - offset))) == 0) { *index = *main_index; index++; } main_index++; } *index = '\0'; memcpy (main_str, str, strlen (str) + 1); free (str); return; } int main (int argc, char * argv[]) { char test[] = "aabcdaaaaabcaacb"; delete_str_char (test, "bcd"); printf ("%s\n", test); return 0; }
本文介绍了一个C语言程序,该程序能够从主字符串中删除所有出现在子字符串中的字符。通过使用位图来标记需要删除的字符,实现了高效地过滤操作。

被折叠的 条评论
为什么被折叠?



