赞
踩
字符串(String)是由零个或多个字符组成的有限序列。记为 S = ‘a1a2…an’(n>0)
其中,S是串的名字,用单引号括起来的字符序列是串的值,每个 ai(1<=i<=n)可以是字母、数字或其它字符。n是串中字符的个数,称为串的长度,n=0时的串称为空串。
子串:串中任意个连续的字符组成的子序列称为该串的子串。
主串:包含子串的串称为主串。
子串在主串中的位置:通常将字符在串中的序号称为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
串相等:当且仅当两个串的值相等时,称这两个串是相等的,即只有当两个串的长度相等,并且每个对应位置的字符都相等时才相等。
串是一种特定的线性表,串的逻辑结构和线性表极为相似,其特定性仅在于串的数据对象限定为字符集。常用的实现方法有定长顺序串、堆串和块链串。
串的模式匹配(简单模式匹配算法、KMP算法)见:https://blog.csdn.net/weixin_51450101/article/details/122684649
定长顺序串是将串设计成一种静态结构类型,用一组地址连续的存储单元来存储串的字符序列。
# include<stdio.h> # define MAXLEN 40 # define TRUE 1 # define FALSE 0 /*定长顺序串*/ /*定长顺序串的存储结构*/ typedef struct { char ch[MAXLEN]; int len; //字符串长度 }SString; /*定长顺序串初始化*/ void StrInit(SString* S) { S->len = 0; } /*定长顺序串的创建*/ void StrCreate(SString* S) { int n, i; printf("字符串长度为:"); scanf("%d", &n); printf("请输入字符串:"); for (i = 0; i < n; i++) { scanf(" %c", &(S->ch[i])); } S->len = n; } /*插入*/ int StrInsert(SString* S, int pos, SString *t) { //在串S中下标为pos的字符之前插入串t int i; if (pos < 0 || pos > S->len) //插入位置不合法 return FALSE; if (S->len + t->len <= MAXLEN) { //插入后串长<=MAXLEN for (i = S->len + t->len - 1; i >= t->len + pos; i--) S->ch[i] = S->ch[i - t->len]; //位置pos后的字符串后移 for (i = 0; i < t->len; i++) S->ch[i + pos] = t->ch[i]; //将t串插入 S->len = S->len + t->len; } else if (pos + t->len <= MAXLEN) { //插入后串长大于MAXLEN,但串t的字符序列可以全部插入 for (i = MAXLEN - 1; i > t->len + pos - 1; i--) S->ch[i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。