计算字符串中子串出现的次数的问题,麻烦帮忙看看
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个数。主函数实现输入整数、输出整数及调用整数移位函数步骤。
还有这个不会,求懂的帮一下忙,如果有代码注释更好