社区
数据结构与算法
帖子详情
求解 字符串及其应用
Zhangjiwen521
2010-04-20 02:58:16
问题描述:
统计一段文字(英文字符串)中,指定关键字(由用户从终端输入)的出现次数和第一次出现的位置。
例如用户输入:x abc df ab cks abc sdf
abc
则程序输出:abc出现2 次
首次出现在3号位
...全文
218
12
打赏
收藏
求解 字符串及其应用
问题描述: 统计一段文字(英文字符串)中,指定关键字(由用户从终端输入)的出现次数和第一次出现的位置。 例如用户输入:x abc df ab cks abc sdf abc 则程序输出:abc出现2 次 首次出现在3号位
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GentooEmacs
2010-05-08
打赏
举报
回复
经典之作:
http://acm.hdu.edu.cn/showproblem.php?pid=1030
dawnkeen
2010-04-28
打赏
举报
回复
很简单的!!!
曦轩
2010-04-28
打赏
举报
回复
用库的话strstr()搞定,自己写的话用KMP,不过KMP效率已经不算高的了
GentooEmacs
2010-04-27
打赏
举报
回复
给你写好了,结贴给分吧,不懂的话在我空间留言,给你解释一下。
#include<iostream>
using namespace std;
char c[1024],s[1024];
char*p=c;
void mach(char*c, char*s,int&n,int&flag )//c[]为原数组,s[]为关键字部分
{
int i,j;
i=0;j=0;
while(c[i]!='\0'&&c[i]!=' '&&s[j]!='\0')
{
if(c[i]==s[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j==strlen(s)&&(c[j]==' '||c[j]=='\0'))
{if(n==0)flag=c-p;
n++;
mach(c+j,s,n,flag);
}
else if(c[i-j+1]!='\0')mach(c+i-j+1,s,n,flag);
}
int main()
{
gets(c);int n=0;puts(c);int flag=0;
cout<<"关键字\n";
gets(s);
mach(c,s,n,flag);
cout<<"匹配个数"<<n<<endl;
cout<<"第一次出现位置"<<flag+1<<endl;
return 0;
}
lingling1989r
2010-04-22
打赏
举报
回复
你这个例子都有空格分隔的.那就比要用KMP的题目简单了,这个输入都这样的么?
renzhewh
2010-04-22
打赏
举报
回复
strstr 即可完成,不需自己造轮子
十八道胡同
2010-04-21
打赏
举报
回复
kmp算法
http://blog.csdn.net/LCL_data/archive/2010/04/21/5513517.aspx
owt5008137
2010-04-20
打赏
举报
回复
KMP算法
直接把我以前写的模板拿来改了一点就发来了
原文:http://www.owent.net/part/Article/?id=1
代码如下:
//kmp模式匹配
//算法复杂度O(m+n)
typedef int kmp_counter;
#define kmp_matchChar(a,b) (a==b)
//可根据被匹配字符串长短修改类型和大小
//同时注意修改下面的i和j的类型和返回类型
kmp_counter posLastMatch[10000]={0};
kmp_counter kmp_match(char *source,char *checked, kmp_counter &num)
{
kmp_counter i,j;
i = j = 0;
if(*(checked + i))
{
i ++;
while(*(checked + i))
{
for(j = posLastMatch[i - 1] ; !kmp_matchChar(*(checked + i) , *(checked + j)) && j ; j = posLastMatch[j - 1]);
posLastMatch[i] = (kmp_matchChar(*(checked + i) , *(checked + j)))? j + 1 : 0 ;
i ++;
}
//计算匹配子串个数(子串间无重叠)
num = 0;//计数变量
for(i = j = 0 ; *(source + i) ; i ++)
{
if(kmp_matchChar(*(checked + j) , *(source + i)))
j ++;
else if(j)
i --, j = posLastMatch[j - 1];
if(!*(checked + j))
num ++,j = 0;//如果要子串间重叠 则此句中j=0 改成 j = posLastMatch[j - 1]
}
//计算首个匹配子串位置
for(i = j = 0 ; *(checked + j) && *(source + i); i ++)
{
if(kmp_matchChar(*(checked + j) , *(source + i)))
j ++;
else if(j)
i --, j = posLastMatch[j - 1];
}
if(!*(checked + j) )
return i - j + 1;
else
return 0;
//返回匹配的串的第一个字符出现位置(从1开始计数,0表示无匹配)
}
return 0;
}
使用的时候运行
d = kmp_match(a,b,c);
就是从a里匹配b,d为起始位置,c为匹配数量
hellodota121
2010-04-20
打赏
举报
回复
字符串匹配,kmp算法
canoe982
2010-04-20
打赏
举报
回复
如果只是要程序,使用语言中的字符串操作函数可以很方便的实现了。
zhangxr123
2010-04-20
打赏
举报
回复
楼主这个是要程序?简单的匹配算法就可以搞定了撒
michael122
2010-04-20
打赏
举报
回复
字符串匹配,kmp算法
字符串
中的最长重复串
打印出一个
字符串
中的最长的一个重复子串,并打印出重复的位置。
【
字符串
匹配】基于模式匹配与子串约束的最小复杂度密码
求解
:贪心算法在软件安全中的
应用
研究
内容概要:本文描述了一个编程竞赛题目,要求根据给定的模式
字符串
和超级密码
字符串
,找出满足条件的最简单密码并计算其复杂度。密码需符合特定模式(含'?'和'*'通配符),同时是超级密码的子串,且字符复杂度之和最小(a=1, b=2,...)。若无解则返回-1。输入包含多个测试用例,程序需对每个用例输出对应复杂度。; 适合人群:具备基本
字符串
处理与算法设计能力,熟悉正则匹配或动态规划的编程人员及算法竞赛初学者; 使用场景及目标:①掌握
字符串
匹配中通配符'?'和'*'的处理逻辑;②练习动态规划或深度优先搜索在最优解
求解
中的
应用
;③提升对
字符串
复杂度建模与最小化问题的解决能力; 阅读建议:此资源为竞赛类问题,建议结合输入样例手动模拟匹配过程,深入理解状态转移逻辑,并尝试优化算法效率以应对边界情况。
回文串:特殊对称
字符串
及其在计算机科学和多领域的广泛
应用
与研究进展
内容概要:本文深入探讨了回文串的概念、特性、检测方法及其广泛
应用
。回文串是指那些正读与倒读相同的特殊
字符串
,在多个领域有着重要意义和
应用
价值。文中首先阐述了回文串的定义及其特征,并从数学角度讨论了其理论价值。接着介绍了三种主要的回文串检测方法:双指针法、中心扩展法和动态规划法,每种方法均有详细的解释及优缺点分析。此外,文章提到了回文串的实际
应用
场景,比如文学创作、编程竞赛中的难题
求解
以及信息安全中的密码编制等。最后探讨了近年来关于回文串研究的新成果和发展趋势,特别是在生物科技、信息检索等方面的新兴研究方向。 适合人群:从事计算机科学研究的技术人员;对
字符串
处理算法感兴趣的程序员;关注跨学科研究(尤其是生物信息学)的研究学者及学生。 使用场景及目标:帮助读者了解并掌握高效的回文串判别方法和技术;增强对于对称性的认识;启发在新领域能否引入类似的思路或概念,以促进相关领域的创新发展。 其他说明:本文旨在全面覆盖回文串的相关知识,既注重学术价值也强调实际
应用
效果。无论是希望通过学习提升自我技能的专业人士还是仅仅因为好奇想要了解更多细节的一般读者都能从中受益。
算法设计字符环最长连续公共
字符串
长度计算:
字符串
匹配与倍增法实现技术解析
内容概要:本文介绍了如何计算两个字符环上最长连续公共
字符串
的长度。字符环是指将
字符串
首尾相连形成的环状结构。为简化计算,文中提出了一种方法:将每个
字符串
复制自身形成新的“倍串”,以此避免对首尾连接处的特殊处理,从而以空间换取时间效率。通过遍历两个倍串,逐字符对比寻找最长匹配子串。算法使用C/C++实现,首先读入两个
字符串
并各自拼接自身,然后利用双重循环进行字符匹配,记录最大连续相同字符的数量作为结果输出。; 适合人群:有一定编程基础,尤其是熟悉C/C++语言的程序员或计算机专业学生。; 使用场景及目标:①理解字符环的概念及其
应用
场景;②掌握以空间换时间的优化思路;③学习
字符串
匹配算法的具体实现,提高编程技能。; 阅读建议:读者应重点理解字符环的构造方式以及为何通过倍串可以简化问题
求解
过程。同时,注意代码中的细节处理,如边界条件的判断和最大值更新逻辑。建议边读边动手实践代码,加深对算法的理解。
后缀数组——处理
字符串
的有力工具1
摘要】后缀数组是处理
字符串
的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后
数据结构与算法
33,029
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章