社区
数据结构与算法
帖子详情
求解 字符串及其应用
Zhangjiwen521
2010-04-20 02:58:16
问题描述:
统计一段文字(英文字符串)中,指定关键字(由用户从终端输入)的出现次数和第一次出现的位置。
例如用户输入:x abc df ab cks abc sdf
abc
则程序输出:abc出现2 次
首次出现在3号位
...全文
237
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算法
算法学习之暴力
求解
本文深入探讨了暴力
求解
方法及其在排序、搜索、几何问题和特定算法如旅行推销员问题、背包问题及任务分配问题中的
应用
。通过详细解释选择排序、冒泡排序、线性搜索和
字符串
匹配等基本算法,以及近点问题、凸包问题等几何问题的
求解
策略,文章展示了暴力方法的局限性和优化潜力。此外,文章还对比了穷举搜索与动态规划等更高效算法,揭示了在特定场景下暴力
求解
的价值与局限。
字符串
KMP——用途广泛的
字符串
匹配算法 + 扩展KMP——特殊定义的
字符串
匹配
本文详细介绍KMP算法原理及其
应用
,包括基本的KMP算法及扩展KMP算法。讲解了如何
求解
字符串
匹配问题,以及如何在线性时间内
求解
每个前缀的最长边界等问题。
KMP题目
求解
详细步骤笔记
本文深入解析KMP算法中next[]和nextval[]数组的
求解
过程,通过具体示例详细阐述了KMP算法的实现原理及其在
字符串
匹配中的
应用
。
字符串
Hash-
本文深入讲解了
字符串
Hash算法,包括单Hash和双Hash方法,以及如何利用Hash算法高效地
求解
字符串
子串的问题。通过具体实例,展示了如何计算
字符串
及其子串的Hash值,以及在实际问题中的
应用
。
KMP经典算法与变形的
应用
(
字符串
parttern匹配问题)
本文深入讲解KMP算法及其变形在
字符串
匹配问题中的
应用
,包括next数组的
求解
、经典KMP算法实现及优化,旨在帮助读者理解并掌握高效
字符串
搜索技巧。
数据结构与算法
33,025
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章