数据结构之定长字符串的输入,比较,字符匹配

来源:互联网 发布:卡普顿大学知乎 编辑:程序博客网 时间:2024/06/08 17:50



本文章写的是数据结构之定长字符串的实现

定长字符串

数据结构定义为
#define maxsize 256
typedef char SString[maxsize+1];

s[0]保存串的长度


#include<stdio.h>#include<string.h>#include<string>#include<cmath>#include<algorithm>#include<iostream>using namespace std;#define OK 1#define ERROR 0typedef int status;#define maxsize 256typedef char SString[maxsize+1];/*定长字符串这种字符串的是s[0]保存着字符串的长度*/int strLength(SString s)//返回是字符长{    return s[0];}int strCompare(SString s,SString t)//若两字符串相等就返回0,否则返回ascill码的差值,{//需要注意的是若两字符串不等长,但短的都能与长的匹配,那么就返回长度差    int i,j;    for(i=1; i<=s[0]&&i<=t[0]; i++)    {        if(s[i]!=t[i])return s[i]-t[i];    }    return s[0]-t[0];}int next[100];int index(SString s,SString t,int pos)//字符匹配之朴素匹配法{    int i,j;    i=pos;    if(pos<1||pos>s[0])return ERROR;    j=1;    while(i<=s[0]&&j<=t[0])    {        if(s[i]==t[j])        {            i++;            j++;        }        else {            i=i-j+2;//(i-j+1)+1,i-j+1是开始匹配的位置,当模式串失配时,要从后一个位置开始匹配即(i-j+1)+1            j=1;        }    }    if(j>t[0])return i-t[0];    else return 0;}int index_kmp(SString s,SString t,int pos)//kmp算法{    int i,j,k;    i=pos;    if(pos<1||pos>s[0])return ERROR;//定长顺序字符串从下标为1的位置开始存储    j=1;    while(j<=t[0]&&i<=s[0])    {        if(j==0||t[j]==s[i])        {            j++;            i++;        }        else j=next[j];    }    if(j>t[0])return i-t[0];    else return 0;}int get_next(SString t){    int i,j;    i=1;    j=0;    next[1]=0;    while(i<t[0])    {        if(j==0||t[j]==t[i])        {            i++;            j++;            next[i]=j;        }        else j=next[j];    }}void strInput(SString &s)//因为定长顺序字符串的首位置保存的是字符串的长度,故用专门的输入函数来输入这种字符串{    int i=1,j,k;    char ch;    while(scanf("%c",&ch)!=EOF&&ch!='\n')    {        s[i]=ch;        i++;    }    s[0]=i-1;    s[i]='\0';}int main(){    int i,j,k;//    char ss[]= {8,'a','b','a','a','b','c','a','c'};    SString s,t;    strInput(s);   strInput(t);//    printf("%d",s[0]);  //  printf("%d",strCompare(s,t));//    for(i=1; i<=s[0]; i++)//        printf("%c",s[i]);   get_next(t);//    for(i=1; i<=t[0]; i++)//        printf("%d ",next[i]);   printf("%d",index_kmp(s,t,1));//    printf("%d\n",index(s,t,1));    return 0;}/*abaabcacABCDEABCCABCDEFGDEF*/

阅读全文
0 0