存档

文章标签 ‘位索引’

二进制思考系列文章(目录)

2012年3月2日 2 条评论

二进制思考(三):位排序、位索引(bit-map)简单举例

2012年3月1日 3 条评论

---

本节目的是利用上一节的知识加深理解《编程珠玑》中的一道位排序题目,位排序的思想比较简单,具体代码见参考文献吧,这里就不罗列了。

本文主要是写一下《The C Programming Language》第二章中一道非常简单的小题目,文中使用了三种方法,可以对比一下。

题目:编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。

分析:这道题目的注意点主要有两个,一是搜索匹配的字符,二是删除字符时后续字符的前移。这两方面都是有技巧在里面的,见代码

方法一:暴力搜索

#include<stdio.h>

void squeeze(char *s1, char *s2);
int ishave(char *s2, char c); // 判重

void main()
{
	char s1[] = "abcdefghigklmn";
	char s2[] = "helloworld";
	squeeze(s1,s2);
	printf("%s\n",s1);
}

void squeeze(char *s1, char *s2)
{
	int i = 0, j = 0;
	for(; s1[i] != '\0'; ++i)
	{
		if(!ishave(s2,s1[i]))
		{
			s1[j++] = s1[i];
		}
	}
	s1[j] = '\0';
}

int ishave(char *s2, char c)
{
	int i = 0;
	while(s2[i] != '\0')
	{
		if(s2[i] == c)
			return 1;
		++i;
	}
	return 0;
}

阅读全文...