|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 关于删除字符串中字符的问题
我的收件箱(0)
共有
2000
人关注过本帖
标题:
关于删除字符串中字符的问题
只看楼主
加入收藏
bjut_Allen
来 自:平乐园工业技术学校
等 级:
蜘蛛侠
威 望:
8
帖 子:323
专家分:1223
注 册:2016-10-16
结帖率:
95.45%
楼主
收藏
已结贴
√
问题点数:5 回复次数:10
关于删除字符串中字符的问题
怎么把字符串中重复的字符只保留第一个,数组(或动态存储空间)长度也相应减少,比如aabc 输出abc,aaaaac输出ac
Code is my life.
2016-12-15 21:29
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10611
专家分:43224
注 册:2014-5-20
第
2
楼
收藏
得分:5
#include <stdio.h>
main()
{
char s[]="aaccccbbbddddd";
char c[256]={0};
char *p;
int i=1;
puts(s);
for (p=s; *p; p++)
if (c[(unsigned char)*p] == 0)
c[(unsigned char)*p] = i++;
s[--i] = 0;
for (i=0; i<256; i++)
if (c[i] > 0)
s[c[i]-1] = i;
puts(s);
}
[此贴子已经被作者于2016-12-15 21:59编辑过]
2016-12-15 21:58
举报帖子
使用道具
赠送鲜花
九转星河
来 自:长长久久
等 级:
贵宾
威 望:
52
帖 子:5023
专家分:14003
注 册:2016-10-22
第
3
楼
收藏
得分:0
回复 2楼 吹水佬
sunday算法
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-15 22:04
举报帖子
使用道具
赠送鲜花
bjut_Allen
来 自:平乐园工业技术学校
等 级:
蜘蛛侠
威 望:
8
帖 子:323
专家分:1223
注 册:2016-10-16
第
4
楼
收藏
得分:0
给我点时间研究研究,太强了
Code is my life.
2016-12-15 22:42
举报帖子
使用道具
赠送鲜花
艾瑞克
来 自:贵州
等 级:
论坛游侠
帖 子:100
专家分:105
注 册:2016-11-8
第
5
楼
收藏
得分:0
什么是sunday算法
九转星河
2016-12-16 22:28
举报帖子
使用道具
赠送鲜花
xzlxzlxzl
来 自:湖北
等 级:
贵宾
威 望:
125
帖 子:1091
专家分:5825
注 册:2014-5-3
第
6
楼
收藏
得分:0
关于Sunday算法,第一次看到吹版主提出,我就百度了的,并按我的理解注释在我的代码里了,但很快被吹版主更正,吹版主把在asc码表登记最右边字符出现的位置理解为Sunday算法核心。我虽不苟同,但因无认识,就没再跟题。现发现该算法反复被误传,为正视听,现给出别人的理解供广大坛友参考:http://
通过百度多篇关于Sunday算法文章,我当初那种认为也有偏颇,我那种无需一个个比较的算法可能叫BM算法。有代码实现Sunday算法的确用了码表,只是一种空间换时间技巧,算不上算法核心,并且不是我们那种用法,只记录子串字母出现位置方便计算下次比较位置而已。
收到的鲜花
九转星河
于
2016-12-17 10:34
送鲜花
5朵 附言:好文章
2016-12-17 00:04
举报帖子
使用道具
赠送鲜花
九转星河
来 自:长长久久
等 级:
贵宾
威 望:
52
帖 子:5023
专家分:14003
注 册:2016-10-22
第
7
楼
收藏
得分:0
回复 6楼 xzlxzlxzl
汗
;,以前我以为出现A表就认为这是sunday算法,看来我还是要认真看看你提供的网站啊,学习了
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 10:30
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10611
专家分:43224
注 册:2014-5-20
第
8
楼
收藏
得分:0
这贴有个试用Sunday算法写strstr(),有示例说明,Sunday算法的子串数组,对于子串中重复出现的字符,为什么只保存最右边那个字符(最后出现的)。
https://bbs.bccn.net/viewthread.php?tid=472110&page=2#pid2604301
2016-12-17 11:15
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10611
专家分:43224
注 册:2014-5-20
第
9
楼
收藏
得分:0
Sunday算法是字符串搜索匹配算法,他与其他类似算法的不同点是巧妙地使用了一个子串数组,当要搜寻子串时不用去扫描子串,而时点到即得到,从而大大提高了字符比对速度。
Sunday算法这巧妙做法的思想,有时变通一下用来解决其他问题也挺好使的。
如字符列表的排序:zxcmvbnmb -> bbcmmnvxz,扫描一次zxcmvbnmb就搞定。
#include <stdio.h>
int main()
{
char s[]="zxcmvbnmb";
int i, j, c[128]={0};
char *p;
//一次扫描
for (p=s; *p; p++)
c[*p]++;
//输出结果
for (i=0; i<128; i++)
if (c[i] > 0)
for (j=0; j<c[i]; j++)
printf("%c", i);
}
2016-12-17 11:43
举报帖子
使用道具
赠送鲜花
xzlxzlxzl
来 自:湖北
等 级:
贵宾
威 望:
125
帖 子:1091
专家分:5825
注 册:2014-5-3
第
10
楼
收藏
得分:0
回复 9楼 吹水佬
嗯,这叫“计数法排序”,是有限域正整数集合快速排序的一种方法,其实就是查表法的一种实用。
查表法的优缺点大家可以百度。查表法不是sunday算法核心,我在6楼提供的链接里的代码示例就没有使用查表法。
就我理解sunday算法的核心是:正向取源串和子串逐个比较,发现不同则源串比较位置+子串长度,此时再反向比较子串,有相同,对齐和源串逐个比较,凡是不同则源串的比较位置加子串长度。因此最快的比较次数为“源串长度/子串长度”,最痞的比较等同于逐个比较,这种情况发生在每次取出比较位置的源串字符=子串第二个字符。
[此贴子已经被作者于2016-12-18 13:45编辑过]
2016-12-18 13:31
举报帖子
使用道具
赠送鲜花
11
1/2页
1
2
快速回复:
关于删除字符串中字符的问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018065 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved