串(功能:插入、串匹配)——简单匹配算法

原创 2015年11月17日 23:10:40
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20


typedef struct {
char str[MAXSIZE];
int len;
}SString;


SString *StrInit();
SString *StrInsert();
void Print();
int StrIndex();




void main () {
int i;
SString *s = NULL;
SString *t = NULL;
// SString *v = NULL;
s = (SString *)malloc(sizeof(SString));
t = (SString *)malloc(sizeof(SString));
// v = (SString *)malloc(sizeof(SString));
s = StrInit(s);
printf("\n输出s = %d\n",s->len);
Print(s);
t = StrInit(t);
printf("\n输出t = %d\n",t->len);
Print(t);
// printf("请设置插入点:");
// scanf("%d",&i);
// s = StrInsert(s,i,t);
// printf("\n输出s = %d\n",s->len);
// Print(s);
printf("\n%d\n",StrIndex(s,t,1)+1);
}


SString *StrInit(SString *s) {
int i;
printf("请设置串的长度:");
scanf("%d",&s->len);
for (i = 0; i < s->len; i++) {
printf("第%d个字符:",i+1);
scanf("%d",&s->str[i]);
}
printf("\n");
return s;
}


SString *StrInsert(SString *s, int pos, SString *t) {
int i,j;
if (pos < 1||pos >s->len+1) return 0;
if (s->len + t->len <= MAXSIZE) {
for (i = s->len + t->len, j = 0; i > s->len; i--,j++) {
s->str[i-1] = s->str[i-t->len-1] ; 
printf("\nj = %d\n",j);
}
for (i = 0; i < t->len; i++) {
s->str[pos+i+-1] = t->str[i] ;
}
s->len = s->len + t->len ;
}
else {
if (pos + t->len > MAXSIZE){
for (i = pos-1, j = 0; i <= MAXSIZE-1; i++, j++) {
s->str[i] = t->str[j] ;
}
}
else {
for (i = MAXSIZE; i >= t->len+pos-1; i--){
s->str[i-1] = s->str[i-t->len-1] ;
}
for (i = 0; i < t->len; i++) {
s->str[pos+i-1] = t->str[i] ;
}
}
s->len = MAXSIZE ;
}
return s;
}


void Print(SString *s) {
int i;
printf("**********************************\n");
for (i = 0; i < s->len; i++) {
printf("第%d个字符 = %d\n",i+1,s->str[i]);
}
}


int StrIndex(SString *s, SString *t, int pos) {
int i,j,start;
if (t->len == 0) {
return 0;
}
start = pos;
i = start;
j = 0;
while (i < s->len && j < t->len) {
if (s->str[i] == t->str[j]) {
i++;
j++;
}
else {
start++;
i = start;
j = 0;
}

if (j >= t->len) {
return start;
}
else {
return -1;
}
}

数据结构---串的模式匹配算法介绍

前言 The years teach much which the days never knew. Time:2017/2/19 Name:Willam 1、介绍 对于文本程序来说...
  • qq_35644234
  • qq_35644234
  • 2017年02月21日 19:26
  • 2230

串的匹配:朴素匹配&KMP算法

引言 字符串的模式匹配是一种常用的操作。模式匹配(pattern matching),简单讲就是在文本(text,或者说母串str)中寻找一给定的模式(pattern)。通常文本都很大,而模式则比较短...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014年07月23日 22:30
  • 2263

编写一个程序实现模式串的各种模式匹配

/* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 2 日...
  • wh201458501106
  • wh201458501106
  • 2016年07月02日 15:25
  • 1965

KMP算法 串的模式匹配算法优秀总结

转载大神的博客受益匪浅 这几天学习kmp算法,解决字符串的匹配问题,开始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年05月20日 12:21
  • 1352

数据结构——串的朴素模式和KMP匹配算法

一、朴素模式假设我们要从主串S=”goodgoogle"中找到子串T=“google"的位置,步骤如下:i表示主串的当前位置下标,j表示子串的当前位置下标,如上图在第一轮比较(i=1开始)中j=4和i...
  • lxq_xsyu
  • lxq_xsyu
  • 2014年12月07日 14:34
  • 3598

字符串单模板匹配学习笔记(一)kmp算法

【参考资料】 先上链接: 《字符串匹配的KMP算法》-阮一峰 http://kb.cnblogs.com/page/176818/ 《字符串匹配算法总结》 http://blog.csdn....
  • gungnir0711
  • gungnir0711
  • 2015年12月01日 00:56
  • 547

字符串模式匹配算法--详解KMP算法

在软考的复习中,看到过几次 字符串的模式匹配算法。看起来挺难的。所以花了点时间查了查关于字符串匹配的算法。下面详细介绍一下KMP模式匹配算法 以及next[j]函数如何计算。...
  • zc474235918
  • zc474235918
  • 2014年10月26日 10:14
  • 3067

数据结构——串(朴素的模式匹配算法、KMP模式匹配算法)

提示:以下内容不适合零基础人员,仅供笔者复习之用。 概要: 串是由零个或多个字符组成的有限序列,又名叫字符串。 一、串的比较     给定两个串,s = "a1a2.....an",t="b1...
  • daijin888888
  • daijin888888
  • 2017年04月20日 16:03
  • 1099

数据结构 顺序串的各种模式匹配算法

如图效果: #include #include #include using namespace std; #define MaxSize 100 int next[MaxSize],next...
  • a716121
  • a716121
  • 2016年04月01日 13:07
  • 498

串的简单模式匹配和KMP算法

串的简单模式匹配和KMP算法                  所谓串就是指字符串,在计算机中是一种很常见并且很重要的数据结构,我们平时所处理的文档实际上就是字符串。而对字符串的操作中比较常见的一种...
  • dream_follower
  • dream_follower
  • 2017年08月31日 14:24
  • 207
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:串(功能:插入、串匹配)——简单匹配算法
举报原因:
原因补充:

(最多只允许输入30个字)