串-数据结构(12)

来源:互联网 发布:数据建模知乎理论物理 编辑:程序博客网 时间:2024/05/20 00:36

一、解析

串(或字符串)是由零个或多个字符组成的有限序列。一般在S[0]的位置上放置的是该字符串的字符长度。其实就是字符串了,这个串的数据结构一般的在各种语言中都有实现的。参考书上第四章,其中有个很重要的kmp模式匹配很值的去看,然而我不会,因此略过。

二、存储结构

typedef unsigned char SString[MAXSTRLEN + 1];

三、操作

#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN + 1];//定长顺序存储Status Concat(SString &T,SString S1,SString S2){//用T返回由S1和S2联接而成的新串。若未截断,则返回True,否则falseif (S1[0] +S2[0]<=MAXSTRLEN){//不需要截断}else if (S1[0] <MAXSTRLEN){//截断}return true;}void PrintfSString(SString s){for (int i = 1; i <= s[0]; i++){printf("%c", s[i]);}}void CreateString(SString &S,char * str){int count = 0,j = 1;while (str[count] != '\0'){S[j] = str[count];count++;j++;}S[0] = count;printf("%d\n", count);}int Index(SString S,SString T ,int pos){//返回子串T在主串S中的第pos个字符之后的位置。若不存在,函数值为0.//其中,T非空 、pos[1,StrLength(S)]int i = pos;//子串中的位置int j = 1;//主串中的位置while (j <= T[0] && i <=S[0]){if (S[i] == T[j]){//匹配成功i++; j++;}else{//匹配失败 j复位i = i - j + 2;j = 1;}}if ( j>T[0]){return i - T[0];}else{return 0;}}

四、执行

SString s1;CreateString(s1,"asdfghjkl");PrintfSString(s1);SString s2;CreateString(s2, "fgh");PrintfSString(s2);int pos = Index(s1,s2,1);printf("返回的位置:%d\n",pos);
输出:
9asdfghjkl3fgh返回的位置:4请按任意键继续. . .



原创粉丝点击