/*
* Copyright (c) 2015, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称: SqString.cpp,SqString.h,main.cpp
* 作者:于东林
* 完成日期:2015年11月23日
* 版本号:codeblocks
* 问题描述: 采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,如果该子串不出现则为0。
* 输入描述:无
* 程序输出:2
*/
程序及代码:
#ifndef SQSTRING_H_INCLUDED
#define SQSTRING_H_INCLUDED
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef struct
{ char data[MaxSize]; //定义可容纳MaxSize个字符的空间
int length; //标记当前实际串长
}SqString;
void StrAssign(SqString &s,char cstr[]); //字符串常量cstr赋给串s
int StrLength(SqString s); //求串长
void DispStr(SqString s); //输出串
int str_count(SqString s,SqString t);
#endif // SQSTRING_H_INCLUDED
#include "listss.h"
void StrAssign(SqString &s,char cstr[])
{
int i;
for(i=0;cstr[i]!='\0';i++)
{
s.data[i]=cstr[i];
}
s.length=i;
}
int StrLength(SqString s)
{
return s.length;
}
void DispStr(SqString s)
{
int i;
if(s.length>0)
{
for(i=0;i<s.length;i++)
{
printf("%c",s.data[i]);
}
printf("\n");
}
}
int str_count(SqString s,SqString t)
{
int i=0,j=0,count=0;
while(i<s.length&&j<t.length)
{
if(s.data[i]==t.data[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
if(j>=t.length)
{
count++;
i=i-j+1;
j=0;
}
}
return count;
}
#include "listss.h"
int main()
{
SqString s,t;
StrAssign(s,"accaccacacabcacbab");
StrAssign(t,"accac");
printf("s:");
DispStr(s);
printf("t:");
DispStr(t);
printf("%d\n",str_count(s,t));
return 0;
}
运行结果:
知识点总结:
对bf算法的进一步理解。
学习心得:
学习bf,感觉自己进一步提高了。