| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1234 人关注过本帖
标题:计算字符串中子串出现的次数的问题,麻烦帮忙看看
只看楼主 加入收藏
pipigi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-6-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
计算字符串中子串出现的次数的问题,麻烦帮忙看看
1、 编写函数计算字符串中子串出现的次数,如“abcdefabcdefabcdef”中出现子串“cde”三次(不允许使用标准库函数子串查找功能)。主函数实现输入字符串、输出字符串以及调用计算子串出现次数函数步骤。
#include <iostream>
#include <cstring>
using namespace std;
void getNext(const char* pattern,int next[])
{
next[0]= -1;
int k=-1,j=0;
while(pattern[j]!='\0')
{
if(k!=-1 && pattern[k]!=pattern[j])k=next[k];
++j;++k;
next[j]=pattern[k]== pattern[j]?next[k]:k;
}
}
int KMP(const char *Text,const char* Pattern)
{
if(!Text||!Pattern||Pattern[0]=='\0'||Text[0]=='\0' ) return -1;
int len=0;
const char * c=Pattern;
while(*c++!='\0')++len;
int *next=new int[len+1];
getNext(Pattern,next);
int index=0,i=0,j=0;
while(Text[i]!='\0' && Pattern[j]!='\0' )
{
if(Text[i]== Pattern[j]) ++i,++j;
else
{
index += j-next[j];
if(next[j]!=-1) j=next[j];
else j=0,++i;
}
}
delete []next;
return (Pattern[j]=='\0'?index:-1);
}
int main()
{
char* text="bababCabCadcaabcaababcbaaaabaaacababcaabc";
char* pattern="baaaa";
cout<<KMP(text,pattern)<<endl;
return 0; }
这样做对吗?求大神帮忙看看

2、 编写函数实现以下功能:有n个整数,使其前面各数顺序向后移m个位置,直至最后m个数变成最前面的m个数。主函数实现输入整数、输出整数及调用整数移位函数步骤。

还有这个不会,求懂的帮一下忙,如果有代码注释更好
搜索更多相关主题的帖子: include 字符串 
2015-06-23 12:37
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
有个比较著名的算法叫神马KMP算法

DO IT YOURSELF !
2015-06-23 14:38
快速回复:计算字符串中子串出现的次数的问题,麻烦帮忙看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023015 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved