社区
数据结构与算法
帖子详情
求解 字符串及其应用
Zhangjiwen521
2010-04-20 02:58:16
问题描述:
统计一段文字(英文字符串)中,指定关键字(由用户从终端输入)的出现次数和第一次出现的位置。
例如用户输入:x abc df ab cks abc sdf
abc
则程序输出:abc出现2 次
首次出现在3号位
...全文
220
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算法
算法竞赛
字符串
处理:蓝桥杯字典序最小化问题
求解
:给定
字符串
与字符集插入优化
使用场景及目标:①学习贪心策略在
字符串
构造问题中的
应用
;②掌握如何通过模拟插入过程优化字典序;③备战算法竞赛中涉及
字符串
处理与构造类题目; 阅读建议:此资源结合具体编程实现讲解竞赛题解法,建议读者先...
字符串
中的最长重复串
在编程领域,
字符串
是最基本的数据结构之一,广泛
应用
于各种
应用
场景,如文本处理、数据分析和算法设计等。在处理
字符串
时,经常会遇到寻找其中的特定模式或子串的问题。本问题聚焦于找出
字符串
中的最长重复子串及其...
【
字符串
匹配】基于模式匹配与子串约束的最小复杂度密码
求解
:贪心算法在软件安全中的
应用
研究
适合人群:具备基本
字符串
处理与算法设计能力,熟悉正则匹配或动态规划的编程人员及算法竞赛初学者; 使用场景及目标:①掌握
字符串
匹配中通配符'?'和'*'的处理逻辑;②练习动态规划或深度优先搜索在最优解
求解
中的...
回文串:特殊对称
字符串
及其在计算机科学和多领域的广泛
应用
与研究进展
回文串是指那些正读与倒读相同的特殊
字符串
,在多个领域有着重要意义和
应用
价值。文中首先阐述了回文串的定义及其特征,并从数学角度讨论了其理论价值。接着介绍了三种主要的回文串检测方法:双指针法、中心扩展法和...
算法设计字符环最长连续公共
字符串
长度计算:
字符串
匹配与倍增法实现技术解析
使用场景及目标:①理解字符环的概念及其
应用
场景;②掌握以空间换时间的优化思路;③学习
字符串
匹配算法的具体实现,提高编程技能。; 阅读建议:读者应重点理解字符环的构造方式以及为何通过倍串可以简化问题
求解
...
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章