社区
数据结构与算法
帖子详情
求解 字符串及其应用
Zhangjiwen521
2010-04-20 02:58:16
问题描述:
统计一段文字(英文字符串)中,指定关键字(由用户从终端输入)的出现次数和第一次出现的位置。
例如用户输入:x abc df ab cks abc sdf
abc
则程序输出:abc出现2 次
首次出现在3号位
...全文
202
12
打赏
收藏
求解 字符串及其应用
问题描述: 统计一段文字(英文字符串)中,指定关键字(由用户从终端输入)的出现次数和第一次出现的位置。 例如用户输入:x abc df ab cks abc sdf abc 则程序输出:abc出现2 次 首次出现在3号位
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Sunday
2010-05-08
打赏
举报
回复
经典之作:
http://acm.hdu.edu.cn/showproblem.php?pid=1030
dawnkeen
2010-04-28
打赏
举报
回复
很简单的!!!
曦轩
2010-04-28
打赏
举报
回复
用库的话strstr()搞定,自己写的话用KMP,不过KMP效率已经不算高的了
Sunday
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算法
数据结构算法示范题
求解
及剖析
第四章 数据结构与算法 示范题的
求解
及剖析 示范题19、编程序,输入
字符串
s,统计出s ***出现了多少个数字字符。进一步考虑,如何统计出10 个数字字符各自出现的次数。
求极大独立集的程序实现研究
介绍简单图极大独立集的一种求取算法,剖析了该算法在使用面向对象程序设计模式中的实现方式,提出在定长
字符串
模式匹配中采用异或运算的运算法则来进行
字符串
模式匹配,由此作为多元式代数运算的基础对这个算法进行...
matlab教程课件
通过学习MATLAB提供的多维阵列、结构阵列、单元阵列及
字符串
,掌握MATLAB在处理复杂数据结构和
字符串
方面的
应用
。 1.基本要求 (1) 掌握多维阵列的产生和运算; (2) 掌握结构阵列的形成、操作和
应用
; (3) ...
IOI 2009 国家集训队论文part_2
罗穗骞 后缀数组——处理
字符串
的有力工具 方展鹏 浅谈如何解决不平等博弈问题 姜碧野 SPFA算法的优化及
应用
毛杰明 母函数的性质及
应用
董华星 浅析字母树在信息学竞赛中的
应用
梅诗珂 信息学竞赛中概率问题
求解
初探...
练习Python的实验.doc
Python对数据读取(txt、csv、excel),Python对概率论:离散型常见分布的模拟及其
应用
,Python对概率论:连续型常见分布的模拟及其
应用
,Python来
求解
数据的常用统计量值,绘制经验分布函数图形,Python来解决假设...
数据结构与算法
33,006
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章