| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 404 人关注过本帖
标题:由“求两个字符串的并集的c语言程序?”想开去,实践课程
只看楼主 加入收藏
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
结帖率:59.52%
收藏
已结贴  问题点数:16 回复次数:1 
由“求两个字符串的并集的c语言程序?”想开去,实践课程
以下是引用hpjjiangmali在2012-8-28 04:56:37的发言:

写一个函数将任意给定的两个字符串取并集
 函数原型为:
     char *bingji(char *s1,char *s2);
 
若s1:  abcdde
  s2:  bcdfg
 
则返回的是  abcdefg

这个题目的求并集的字符最大长度  也只有255 个 ASCII 那么大
按照  两个字符STR1 STR 2
在加一个字符 STR3 存放 STR1+STR2的并集
从STR1取1字符放入 STR3中,让再要放进去的字符 一STR3中的字符进行比较 如果不同 放入  如果相同舍弃
就这样读完  对于现在计算机处理来说 速度上不是很大的问题,经过琢磨
提出 另外一种实现方法

1.建立一个255位  位段 位段里每一位二进制码 对应一个字符 以 0 代表这个字符没出现过 1代表这个字符出现过。起始初始化 为 二进制位全部为00000000000000000000000000000

对位的定位采用 位段基地址+ASCII(偏移地址) 来确定对应位的方式找出字符的段位地址。

段位的十进制 位映射   采取方式  字符对应位取1  其余 二进码  全部取0    后转换成十进制来表示  
 
判定 此字符出现过没 ,采取 段位的十进制数 与   255个位  进行相与运算   结果为 000000000000000000000000000000000 表示 表示此位并未被设置   可以插入。  然后进行插入运算

这个算法实现 运算时间 上在这个问题处理上 要比上面的一个算法 在时间上  要慢   

但是 如果 现在题目换成  
对一个已存有的数据文件中,这个文件大到几个G   这个时候要处理的问题 是 统计字符的出现次数的时候   上面的算法实现 是要比下面的算法实现 效率要低的,道理和简单  统计一个字符 你就得 把几个G 的内容全部读完  然后遍历 255 字符确认字符的身份   这个题目   就可以把上面的算法改下就能满足要求了

用异或运算 来归0   用 或 运算来置 1

每统计一个数  就将  先进行 或 运算  置1  统计字符数增1    再进行 亦或  来置0

初始255个二进制位  全部 置0000000000000000000000000000000000000000000000000      
                          0000000000000000000000000000000000000100000000000   进行对应位运算

码表对应关系

混乱了 ,感觉没有意义的很哟    好像跟上面的一样  只是比对了不同的码表   

哎,失败!!!!!!!!我在和自己玩 圈圈?

  
   
  
搜索更多相关主题的帖子: 课程 字符串 abcdefg 
2012-08-31 16:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:16 
人工提升

授人以渔,不授人以鱼。
2012-08-31 16:27
快速回复:由“求两个字符串的并集的c语言程序?”想开去,实践课程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036722 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved