合集下载

串的定义及其基本运算

串的定义及其基本运算

4.2串的定长顺序存储及基本运算
4.2.1存储结构的实现
#define MAXSIZE 256 第一种: typedef struct {char data[MAXSIZE]; int curlen; }SeqString;
0 s.data a 第二种: b c d e f g h i 1 2 3 4 5 6 7 8
j=1 j=3 j=2 j=4
i=2 i=4 i=3 i=5
j 模式串 next[j]
i=5
1 2
0 1
3
1
4
1
5
2
6
2
7
3
8
2
9
3
a b c a a b a b c
s: a a b c b a b c a a b c a a b a b c t: abcaababc
j=1 i=6 i=7i=8 i=10 i=12 i=9 i=11 i=10 i=12
MAXSIZE
4.2.2运算实现(采用第二种表示串长的方式) int StrLength(char s[]) 1. 求串的长度 StrLength(s); {int len=0;
while(s[len]!=‘\0’)len++; return len; }
2.串赋值 void StrAssign(s1,s2) StrAssign(s1,s2); char s1[ ], s2[ ] ;
j=3 j=5 j=7 j=9 j=4 j=6 j=8 j=10
(3)KMP算法实现 循环条件? 什么时候回溯? 回溯时i、j如何计算? 如何判断匹配是否成功? 匹配成功时,返回的起始位置如何计算?
见P61的算法4-5

串的基本概念

串的基本概念

串的基本概念
串(string)是由0个或多个字符组成的有序序列,称为字符串。

它通常被表示为一个记号,例如s='abcdefg',其中s是字符串的名字,a、b、c等
是串的值,可以是字母、数字或者字符。

串的长度是指串中元素的个数。

例如,在字符串s='abcdefg'中,长度为7。

空串是不含任何字符的串,其长度为0。

子串是指一个主串中任意连续字符组成的字符串。

例如,在字符串
s='abcdefg'中,'a'、'bc'、'defg'等都是子串。

此外,当两个串的长度相等,并且对应位置的元素也相等时,这两个串被认为是相等的。

请注意,以上解释是基于计算机科学中关于串的基本概念。

在其他领域,如数学、物理或哲学中,串的概念可能会有所不同。

串的定义和基本运算(精)

串的定义和基本运算(精)
s1->str=(char*)malloc(sizoef(char));s1->str[0]=’\0’;s1>length=0;return ERROR;} s1->str=(char*)malloc((len+1)*sizeof(char)); if (!s1.str) return ERROR; s1->str[0..len-1]=s2.str[start-1..start+len -2]; s1->str[len]=’\0’; s1->length=len; return OK; }
int length;
}STRING; 不同的定义形式,算法中的处理也略有不同。下 面我们将给出在第二种顺序存储方式下串的几个基本 操作的算法。
(1) 串的赋值 int StringAssign(STRING*s,char *string_constant) { if (s->str) free(s->str);
2. 链式存储结构
由于串结构中每个数据元素为一个字符,所以最 直接的链式存储结构是每个结点的数据域存放一个字 符。举例:
S
s
t r i n g^
图 4-1
优点是操作方便;不足ቤተ መጻሕፍቲ ባይዱ处是存储密度较低。所 谓存储密度为:
串值所占的存储单元 存储密度
实际分配的存储密度
若要将多个字符存放在一个结点中,就可以缓解 这个问题。举例:
(4)串连接 int Concat(STRING *s1,STRING s2) { STRING s; StringAssign(&s,s1->str); //将s1原来的内容保留在s中 len=Length(s1)+Length(s2);

第4章 字符串v

第4章 字符串v

空串: 空串: 长度为0的字符串 的字符串; 长度为 的字符串; 空格串: 空格串: 由空格字符组成的字符串,长度>1 由空格字符组成的字符串,长度 主串: 主串: 包含该子串的字符串; 包含该子串的字符串; 字符的位置: 字符的位置: 从1开始 开始 子串的位置: 子串的位置: 该子串第一个字符的位置
定长顺序存储标识串的实际长度时可有三种方式: 定长顺序存储标识串的实际长度时可有三种方式:
(1)用一个指针指向最后一个字符,串描述类似顺序表 用一个指针指向最后一个字符, 用一个指针指向最后一个字符 #define MAXSIZE 256 typedef struct { char data[MAXSIZE]; int curlen; }SeqString; 定义一个串变量:SeqString s; 定义一个串变量
1.串的 定长 顺序存储 串的(定长 串的 定长)顺序存储
(定长 顺序存储结构类似于C语言的字符数组,以一 定长)顺序存储结构类似于 语言的字符数组, 定长 顺序存储结构类似于 语言的字符数组 组地址连续的存储单元存放串值中的字符序列, 组地址连续的存储单元存放串值中的字符序列,定长即是预 先为每一个串变量分配一个固定长度的存储区,例如: 先为每一个串变量分配一个固定长度的存储区,例如: #define MAXSIZE 256 char s[MAXSIZE] 那么,串的最大长度就不能超过 那么,串的最大长度就不能超过256。 。
第4章 串 章
4.1 字符串的基本概念
4. 2 串的存储结构
4.3 模式匹配
(1) 串的基本概念
串(string)是由零个或多个任意字符组成的字符序列, )是由零个或多个任意字符组成的字符序列, 又称为字符串( 又称为字符串(character string),一般记为: ) 一般记为: s=〝a1 a2 a3 … an〞

串与窜的用法

串与窜的用法

串与窜的用法中文中有很多词语,其中一些词语拼音相似,但意思却不同,比如“串”和“窜”。

这两个词语的拼音只有一个音节的差别,但在使用时却有着很大的不同。

本文将为大家详细介绍“串”和“窜”的用法。

一、“串”的用法“串”是一个多义词,可以作为名词、动词和量词使用。

1. 名词作为名词,“串”有两个主要的意思:(1)串珠子:这是“串”的本义,指将许多珠子穿成一串,做成项链、手链等装饰品。

例如:“她用五颜六色的珠子串了一条漂亮的项链。

”(2)一连串的东西:这个意思通常用在口语中,表示一系列相关的事情或事件。

例如:“他连说了一串话,但没人听懂他的意思。

”“我看了一串电影,都是恐怖片。

”2. 动词作为动词,“串”也有两个主要的意思:(1)穿成一串:这个意思与“串”作为名词的第一个意思相同。

例如:“她正在用细线把这些珠子串起来。

”(2)挨家挨户地访问:这个意思通常用在口语中,表示到一个地方去拜访或者调查。

例如:“他今天上午要去串门,看看邻居们的近况。

”3. 量词作为量词,“串”表示一串或者一行的东西。

例如:“他买了一串香蕉。

”“他写了一串代码。

”二、“窜”的用法“窜”作为一个动词,有两个主要的意思:1. 突然出现或者跳动这个意思通常用在描述动物或者人的行为时。

例如:“小狗窜进了屋子。

”“他的心脏突然窜了一下。

”2. 乱跑或者乱闯这个意思通常用在描述人的行为时。

例如:“小偷窜到了街角,跑得飞快。

”“他窜到了禁区,但被守门员扑了出去。

”三、“串”和“窜”的区别在使用中,“串”和“窜”有很大的区别。

以下是一些例子:1. “串”表示连在一起,而“窜”表示跳动或乱跑。

2. “串”可以表示一串东西,而“窜”不可以。

3. “串”可以作为名词、动词和量词使用,而“窜”只能作为动词使用。

4. “串”通常用在描述物品的行为时,而“窜”通常用在描述人或动物的行为时。

结论本文介绍了“串”和“窜”的用法。

虽然这两个词语的发音相似,但在使用时却有着很大的不同。

串词

串词

(2). 湖南省省会长沙是中国工农革命的策源 地,也是毛泽东的故乡。从1911年到1925 年,毛泽东先后7次来到长沙奔走革命。长沙 对毛泽东来说,具有非常深而亲切的政治感 情和生活感情。 下面请欣赏《沁园春.长沙》。 (3). 毛泽东诗词是中国诗林中矗立的一株 参天大树,是一部中国革命的壮丽史册,从 “鲲鹏击浪从兹始”到“恰同学少年,风华 正茂”,我们领略到了毛泽东“唤起工农千 百万”的雄伟气魄。“三军过后尽开颜”的 喜悦告诉世人,“数风流人物,还看今朝”! 同学们,让我们谨记一代伟人的教诲:一万 年太久,只争朝夕!
(1)提示语:网络给人们提供了快捷方便的沟通手 段,IP电话、电子邮件、网上聊天等功能缩短了人 与人的距离,人们之间的交流、帮助更容易、更方 便、更迅速。 宣传语: • 从前咫尺天涯,如今天涯咫尺。 (2)提示语:网络信息量大,资源丰富。新闻、时 讯、资料、图片等应有尽有,取之不尽,用之不竭。 网络资源的丰富性和共享性使人们了解生活信息、 上网学习、查找知识变得更方便更容易。 宣传语: • 一网打尽世界万花筒。
公益广告词
跨世纪的中学生可以说是在广告 中长大的一代,优美而富有哲理的广告 词,对中学生语言积累带来了许多积极 影响。特别是一些公益广告,如说普通 话、公民义务献血、戒烟、环保、扶贫 济困、交通安全、社会公德等等,题材 广泛,贴近生活,命题人没有理由不引 导学生加以关注。
公益广告:不是以收费性的商业宣传来创造 经济效益,而是“免费推销”某种意识和主 张,向公众输送某种文明道德观念,以提高 他们的文明程度,获取良好的社会效益的广 告,就是公益广告
①挺起你的胸膛,谱写壮丽的诗篇;迈开你的 双脚,攀登成功的阶梯;张开你的双臂,拥 抱美好的未来;朋友们,因为我们正年轻! 下面请听大合唱——《年轻的朋友来相会》。 ②天也美,地也美,春光更明媚,城市乡村处 处增光辉。奇迹的创造要靠我,要靠你,更 要靠亲爱的朋友们,要靠我们跨世纪的新一 代青年。请欣赏大合唱《年轻的朋友来相 会》。

数4-串a

数4-串a

A3*4*2 =
a111 a121 a131 a141
a112 a122 a132 a142
a211 a221 a231 a241
a212 a222 a232 a242
a311 a321 a331 a341
a312 a322 a332 a342
第3页
第2页
第1页
5.1.2 数组的类型定义和变量说明: 例1 int a[10]; //10个整数的一维数组 char b[4][5]; //4行5列个字符的二维数组 float c[3][4][2]; //3*4*2个实数的三维数组
即 Am*n=((a11 a12 ...a1n),(a21 a22 ...a2n),...,(am1 am2 ...amn)) 或由n个列向量组成,记作: a11 a21 am1 a12 a22 am2 a1n a2n amn
Amxn=
3.三维数组是一个定长线性表( 1,2,...,p )。 其中: k=( 1,2,...,m )为定长二维数组,1≤k≤p 例 三维数组A[1..3,1..4,1..2], p=3, m=4, n=2
(3)空格串-----仅含空格字符’ ’的串。 例 s1='' s2='' s1=' ' s2=' ' (4)子串---串s中任意个连续的字符组成的子序列称为串s的子串。 主串---包含某个子串的串。 例 st="ABC123A123CD" s1="ABC" s3="123A" s4="ABCA" s2="ABC12" s5="ABCE" s6="321CBA" s1,s2,s3为串s的子串。 2.串变量、字符变量的定义与使用 例1 串变量 char st[]="abc\'*123"; gets(st); scanf("%s",st); strcpy(st,"data"); puts(st); printf("st=%s\n",st); 例2 字符变量 char ch='A'; ch=’B’; ch=getchar(); scanf("%c",&ch); printf("ch=%c\n",ch);

串
初始条件:串S和T存在。 操作结果:若S>T,则返回值>0;若S = T,则返回值=0;若S<T,则返回值<0.
ClearString (&S)
初始条件:串S存在。 操作结果:将S清为空串。
Concat (&T , S1, S2)
初始条件:串S1和S2存在。 操作结果:用T返回由S1和S2联接而成的新串。
Status ClearString(HString &S) { //将S清为空串. if(S.ch) { free(S.ch); S.ch=NULL;} S.length=0; return OK; }// ClearString
Status Concat(HString &T, HString S1, HString S2)
int Strlength(HString S) { return S.length; }
int StrCompare(HString S, HString T) { //若S>T,则返回值>0;若S = T,则返回值=0;若S<T,则返回值<0 for( i=0; i< S.length && i< T.length; ++i ) if(S.ch[i]!= T.ch[i]) return S.ch[i]-T.ch[i]; return S.length- T.length; }
• 二、串的抽象数据类型的定义
ADT String { 数据对象:D={ai| ai∈CharacterSet; i=1,2,…,n,;n≥0} 数据关系:R1={<ai-1, ai>| ai-1, ai∈D; i= 2,…,n} 基本操作: StrAssign (&T , chars)

串
• 紧凑格式:每个字节中存放一个字符。 • 非紧凑格式 :每个存储单元中存放一个字符。 • 事例:S=‘Love China’
• 二者比较:紧凑格式空间利用率高,而非紧凑格式对
串中字符的处理效率低。
普通高等教育“十一五”国家级规划教材
• 存储密度:
串值所占存储字节/实际分配的存储字节
• 串的静态存储结构的两个缺点:
连续的存储空间作为串值的可利用空间;建立一个新串 时,系统就从这个可利用空间中划分出一个大小和串长 度相等的空间存储新串的串值;每个串的串值各自存储 在一组地址连续的存储单元中

1. 2. 3. 4. 5.
串的堆结构存储表示
typedef struct { char *ch; /*非空串,则按串长分配存储区,否则ch为NULL*/ int length; /*串长度*/ }HString;
普通高等教育“十一五”国家级规划教材
算法5.1:堆结构的存储方式实现串插入操作
1. Status StrInsert(HString &S,int pos,HString T) 2. //在串s的第pos个字符前插入串T 3. { 4. if(pos<1||pos>S.length+1) 5. return ERROR; /*pos的值不合法*/ 6. if(T.length) /*T非空,则进行下列操作*/ 7. { /*重新分配存储空间,插入T*/ 8. if(!(S.ch=(char *) 9. realloc(S.ch,(S.length+T.length)*sizeof(char)))) 10. exit(OVERFLOW); 11. for(i=s.length-1;i>=pos-1;--i) 12. S.ch[i+T.length]=S.ch[i]; /*插入位置之后所有的 元素后移*/

串
串(String)
串(字符串):由零个或多个字符组成的有 限序列,一般记为:s= ‘a1a2…an’ 其中:s是串的名字 a1a2…an是串的值 每个ai(1≤i≤n)可以是字母、数字或其他 字符。 单引号本身不是串的值,它是定界符,用于 标志字符串的起始位置和终止位置。 又一种线性结构, 字符的有限序列,即字符 线性表
ห้องสมุดไป่ตู้
它与顺序存储表示的区别就是它们的存储空间 是在程序执行过程中动态分配的。
堆存储结构也可以看作是一种半动态存储结构。
串操作依然是基于“字符序列的复制”, 例如串插入操作StrInsert的实现算法 (参见P75),与顺序表插入相同。 堆分配存储结构的串既有顺序存储结构 的处理方便的特点,操作中对串长又没 有任何限制,因此在串处理的应用程序 中常被使用。 在高级程序设计语言中经常采用顺序存 储结构与堆分配存储结构。


• 串是一种特殊的线性表,它的结点仅由一个 字符组成。串的应用非常广泛,凡是涉及到 字符处理的领域都要使用串。很多高级语言 都具有较强的串处理功能。 • 本章主要介绍了串的有关概念、存储结构以 及串的基本运算和实现。堆结构存储方式的 串既有顺序存储结构的特点,又有动态存储 的特点,所以使用起来更显灵活,因此在串 处理的应用程序中,经常选用串的这种存储 方式来存储串。 • 重点掌握堆结构存储方式以及串的几种基本 运算。
堆分配存储表示
堆结构存储表示是以一组地址连续的存储单元 存放串值字符序列。其实现方法是:系统将一 个空间足够大、地址连续的存储空间作为串值 的可利用空间,每建立一个新串时,系统就从 这个可利用空间中划分出一个大小和串长度相 等的空间存储新串的串值。每个串的串值各自 存储在一组地址连续的存储单元中。

串与窜的用法

串与窜的用法

串与窜的用法在中文中,串和窜是两个相似的词汇,它们经常被人们混淆使用。

虽然它们看起来很相似,但它们的用法是不同的。

在本文中,我们将探讨这两个词语的用法,帮助人们更好地理解它们。

一、串的用法串是一个表示“一连串”的词汇,它通常用于描述一系列有序的事物。

例如:1. 他买了一串珠子。

2. 我们走过一串高楼大厦。

3. 她手里拿着一串钥匙。

4. 我们在一串商店前面停下来。

在这些例子中,串用于描述一系列有序的事物。

它可以用于描述物品、建筑、人或其他事物。

它通常用于描述一组有序的事物,而不是一个单独的事物。

二、窜的用法窜是一个表示“跳跃”或“快速移动”的词汇,它通常用于描述一些快速的动作。

例如:1. 他窜了出去,追赶那个小偷。

2. 鸟儿窜过了天空。

3. 他窜进了车里,开车离开了。

4. 猴子窜上了树。

在这些例子中,窜用于描述快速的动作。

它通常用于描述人、动物或其他物体的快速移动。

它可以用于描述一个单独的动作,而不是一组有序的事物。

三、区别和用法串和窜这两个词汇看起来很相似,但它们的用法是不同的。

串通常用于描述一组有序的事物,而窜通常用于描述快速的动作。

在写作中,我们应该根据上下文的需要来选择正确的词语。

例如:1. 他窜进了一串商店,买了一些东西。

2. 他窜过了一串高楼大厦,追赶那个小偷。

在这些例子中,窜用于描述快速的动作,而串用于描述一组有序的事物。

这些句子的意思可能会因为使用了错误的词语而产生歧义。

四、总结串和窜是两个相似的词语,它们的用法是不同的。

串用于描述一组有序的事物,而窜用于描述快速的动作。

在写作中,我们应该根据上下文的需要来选择正确的词语。

只有正确使用这两个词语,才能更好地表达我们的意思。

ADT字符串

ADT字符串

字符串与字符数组的关系

字符数组:字符数组是C语言中最常见的数组 类型

Char S[];定义一个字符数组变量 字符串常量,以字符数组的形式存储,数组的元素 分别存储字符串的各个字符,并以’\0’标志字符的 结束

字符串:


字符串的用法:与字符数组的使用基本 相同
串的基本运算
为叙述方便起见,先定义几个相关的变量: char str1[20]="dir/bin/appl“ char str2[20]="file.asm",str3[30],*p;
用T[i‥j]表示T的子串“titi+1…tj”(0≦i≦j≦n-1); P[i‥j]表示P的子串"pipi+1…pj"(0≦i≦j≦m-1)。
依 次 将 目 标 串 中 的 子 串 T[i‥i+m-1] 和 模 式 串 P[0..m-1] 进 行 比 较 , 若 T[i..i+m-1]=P[0..m-1]( 即 titi+1‥ti+m-1"="p0p1…pm-1") ,则称从位置 i 开始的匹 配成功;若 T[i..i+m-1]≠P[0..m-1] ,则称从位置 i 开始 的匹配失败。上述的位置 i 又称为位移,当 T[i..i+m1]=P[0..m-1] 时 , i 称 为 有 效 位 移 ; 当 T[i..i+m1]≠P[0..m-1]时,i称为无效位移。 例如, T=“acaabc” , P=“aab” ,当 i 为 0 、 1 时为 无效位移,当i为2时为有效位移。这样,串匹配问题 可简化为找出某给定模式串 P在给定目标串 T中首次 出现的有效位移。

串

int StrCompare(HString S, HString T) { //若S>T则返回值>0, 若S=T则返回值=0,若S<T则返回值<0 for (i = 0; i < S.length && i < T.length; ++i) if (S.ch[i] != T.ch[i]) return S.ch[i] – T.ch[i]; return S.length – T.length; } Status ClearString(HString &S) { //将S清为空串 if (S.ch) {free(S.ch); S.ch = NULL;} S.length = 0; return OK; }

主要内容
• 串的概念 • 串的表示与实现 • 串的应用
为什么要把串单独一张来讲呢?
• 字符串是非数值处理的基本对象 • 应用领域
– – – – 信息检索系统 文字编辑程序 语言翻译系统 ……
• 问题
– 如何有效地组织和存储字符串,并提供必要的操作
串的概念
• 串:由零个或多个字符组成的有限序列,
T
ch length S
0
U
1
N
2 3
Status StrAssign(HString &T, char * chars) { //生成一个其值等于串常量chars的串T if (T.ch) free(T.ch) //释放T原有空间 for (i=0, c=chars; c; ++i, ++c); //求chars的长度i if (!i) {T.ch = NULL; T.length = 0;} else { if (!(T.ch = (char *)malloc(i*sizeof(char)))) exit (OVERFLOW); for (j=0; j<i; j++) {T.ch[j] = chars[j]; } T.length = i; } return OK; } int StrLength(HString S) { //取串长 return S.length; }

串

串、并联电路中的等效电阻知识要点:1.串联电路的特点(1)串联电路电流的特点:由于在串联电路中,电流只有一条路径,因此,各处的电流均相等,即;因此,在对串联电路的分析和计算中,抓住通过各段导体的电流相等这个条件,在不同导体间架起一座桥梁,是解题的一条捷径。

(2)由于各处的电流都相等,根据公式,可以得到,在串联电路中,电阻大的导体,它两端的电压也大,电压的分配与导体的电阻成正比,因此,导体串联具有分压作用。

串联电路的总电压等于各串联导体两端电压之和,即。

(3)导体串联,相当于增加了导体的长度,因此,串联导体的总电阻大于任何一个串联导体的电阻,总电阻等于各串联导体电阻之和,即。

如果用个阻值均为的导体串联,则总电阻。

2.并联电路的特点(1)并联电路电压的特点:由于在并联电路中,各支路两端分别相接且又分别接入电路中相同的两点之间,所以各支路两端的电压都相等,即。

因此,在电路的分析和计算中,抓住各并联导体两端的电压相同这个条件,在不同导体间架起一座桥梁,是解题的一条捷径。

(2)由于各支路两端的电压都相等,根据公式,可得到,在并联电路中,电阻大的导体,通过它的电流小,电流的分配与导体的电阻成反比,因此,导体并联具有分流作用。

并联电路的总电流等于各支路的电流之和,即。

(3)导体并联,相当于增大了导体的横截面积,因此,并联导体的总电阻小于任何一个并联导体的电阻,总电阻的倒数等于各并联导体电阻的倒数之和,即。

如果用个阻值均为的导体并联,则总电阻。

(4)并联电路各支路互不影响,即当一条支路中的电阻发生改变时,只会导致本支路中的电流发生改变,而对其他支路中的各物理量均无影响(因为其他支路两端的电压和电阻均未改变),但是干路中的电流会随可变支路中电流的增大而增大,随着可变支路中电流的减小而减小,而且增大和减小的数值相同。

3.总电阻和等效电阻电路中任何一部分的几个电阻,总可以由一个电阻来代替,而不影响这一部分两端电路原来的电压和电路中这部分的电流强度。

《串、并联电路中电压的规律》PPT课件

《串、并联电路中电压的规律》PPT课件
• 实验中的注意事项:
• 1、连接电路时,开关应断开 • 2、电压表应并联在电路中 • 3、应从电源正极(或负极)起按电路图将 元件逐个首尾顺次连接起来 • 4、每次连接完电路,一定要检查无误后, 再闭合开关 • 5、接通电路前必须先用电流表的大量程试 触 • 6、读数,视线要与刻度线垂直,读数完毕, 断开开关,切断电源 • 7、整理仪器
一、电荷
课堂小结
摩擦起电现象 自然界只有两种电荷
二、电荷间的相互作用
同种电荷相互排斥,异种电荷相互吸引
三、验电器
作用:检验物体是否带电 原理:同种电荷互相排斥
四、电荷量 电荷的多少叫电荷量。单位:库仑(C)
思考:怎样判断物体带电? 怎样使物体带电?
思考:
为什么摩擦后物体 会带电呢?
分子
物质
原子
原子核(带正电)
.
V
• 实验中的注意事项:
• 1、连接电路时,开关应断开 • 2、电流表应串联在电路中 • 3、应从电源正极(或负极)起按电路图将 元件逐个首尾顺次连接起来 • 4、接通电路前必须先用电流表的大量程试 触 • 5、读数,视线要与刻度线垂直,读数完毕, 断开开关,切断电源 • 6、整理仪器
我们生活中有哪些用电的东西呢?
如果没电我们的生活将是什么的?
我们的生活离不开电!! 那你知道电是什么吗?
情景一
塑料梳子梳头发时头 发会随着梳子飘起,圆珠 笔在头皮上摩擦,可以让 笔吸引纸屑等。于是我们 说:梳子、圆珠笔杆都带 了 “ ——电荷 。
电”
一、电荷

摩擦过的物体能吸引轻小的物体,则说明该物体 带了电荷。这种现象叫做摩擦起电现象。 带电的物体也叫做“带电体”
六、电荷在导体中的定向移动: 导体 1、有些物体善于导电: 。 例如:金属、人体、食盐水溶液等 。 绝缘体 2、有的物体不善于导电: 。 例如:橡胶、玻璃、塑料等 。 3、金属导电靠 自由电子移动。

串的基本操作

串的基本操作

串的基本操作#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct{char *str;int length;}HString;//堆串//初始化void InitString(HString &S){S.str ='\0';S.length =0;}//堆串赋值void StrAssign(HString &S,char *chars) {int i,len;char *p;p=chars;if(S.length ==0) return 1;else return 0;}//求堆串长度int StrLength(HString S){r eturn S.length ;}//串的复制操作int StrCopy(HString &T,HString S)/*将串S复制给串T*/{int i;T.str =(char *)malloc(S.length*sizeof(char));if(!T.str)return 0;for(i=0;i<S.length;i++)T.str[i]=S.str[i];T.length=S.length;return 1;}//串的比较操作int StrCompare(HString S,HString T)/*比较串S与串T的大小,如果S的值大于T,返回正值;如果S的值小于T,返回负值;如果相等,返回0*/{int i;for(i=0;i<S.length&&i<T.length;i++)if(S.str[i]!=T.str[i])return (S.str[i]-T.str[i]);return (S.length-T.length );}//串的插入操作int StrInsert(HString &S,int pos,HString T) /*在S中第pos个位置插入T*/{int i;if(pos<0||pos-1>S.length){printf("插入位置错误\n");return 0;}S.str=(char*)realloc(S.str,(S.length+T.length)*sizeof(char) );if(!S.str){printf("内存分配失败\n");return 0;}for(i=S.length-1;i>pos-1;i--)S.str[i+T.length]=S.str[i];for(i=0;i<T.length;i++)S.str[pos+i-1]=T.str[i];S.length=S.length+T.length;return 1;}//串的删除操作int StrDelete(HString &S,int pos,int len)/*在S中删除pos开始的len个字符*/{i nt i;c har *p;i f(pos<0||pos+len-1>S.length){printf("删除位置错误,参数len不合法\n");return 0;}p=(char *)malloc(S.length-len);if(!p){printf("内存分配失败\n");return 0;}for(i=0;i<pos-1;i++)p[i]=S.str[i];for(i=pos-1;i<S.length-len;i++)p[i]=S.str[i+len];S.length=S.length-len;free(S.str);S.str=p;return 1;}//串的连接操作int StrConcat(HString &T,HString S)/*将串S连接在T后*/{int i;T.str=(char*)realloc(T.str,(T.length+S.length)*sizeof(char) ) ;if(!T.str){printf("内存分配失败\n");return 0;}else{for(i=T.length;i<T.length+S.length ;i++)T.str[i]=S.str[i-T.length];T.length =T.length +S.length ;}return 1;}//截取子串操作int SubString(HString &Sub,HString S,int pos,int len)/*将从S中第pos个位置截取长度为len 的子串赋值给Sub*/{int i;if(Sub.str ) free(Sub.str );if(pos<0||len<0||pos+len-1>S.length ){printf("参数len和pos不合法\n");return 0;}else{Sub.str =(char *)malloc(len*sizeof(char));if(!Sub.str){printf("内存分配失败\n");return 0;}for(i=0;i<len;i++)Sub.str[i]=S.str[pos+1-1];Sub.length =len;return 1;}}//串的定位操作int StrIndex(HString S,int pos,HString T)/*在主串S中的第pos个位置开始查找子串T,如果找到,返回子串在主串中的位置;否则,返回-1*/{int i,j;if(StrEmpty(T)){printf("子串为空\n");return 0;}i=pos-1;j=0;while(i<S.length&&j<T.length ) {if(S.str[i]==T.str[j]){i++;j++;}else{i=i-j+1;j=0;}}if(j>=T.length)return i-j+1;elsereturn -1;}//串的替换操作int StrReplace(HString &S,HString T,HString V)/*将串S中的所有子串T用V替换*/{i nt i=1;i nt flag;i f(StrEmpty(T)){printf("子串为空\n");return 0;}do{i=StrIndex(S,i,T);if(i){StrDelete(S,i,StrLength(T));flag=StrInsert(S,i,V);if(!flag){printf("插入失败\n");return 0;}i+=StrLength(V);}}while(i);return 1;}//串的清空操作void StrClear(HString &S) {if(S.str ) free(S.str);S.str='\0';S.length=0;}//输出串void Strprint(HString S){int i;for(i=0;i<S.length ;i++)printf("%c",S.str[i]);}int scan(){int d;printf("\n\n请输入要进行的操作\n1.初始化一个串S\n2.清空串\n3.求串长度\n4.检查串是否为空\n5.输出串\n6.串的赋值操作\n7.串的复制操作\n8.串的比较操作\n9.串的插入操作\n10.串的删除操作\n11.串的连接操作\n12.截取子串操作\n13.串的替换操作\n14.串的定位操作\n其他键退出...\n");scanf("%d",&d);return (d);}main(){int quit =0,pos,len;char a[200];char *s=a;HString S,T,V,Sub;while(!quit)switch(scan()){case 1:InitString(S);break;case 2:StrClear(S);break;case 3:printf("串的长度为:%d\n",StrLength(S));break;case 4:if(StrEmpty(S)) printf("串为空\n");else printf("串非空\n");break;case 5:Strprint(S);break;case 6:printf("请输入要给串S赋的值:");scanf("%s",s);StrAssign(S,s);break;case 7:printf("将串T复制给串S\n");printf("请输入串T的值:");scanf("%s",s);InitString(T);StrAssign(T,s);if(StrCopy(S,T) )printf("复制成功。

串

静态存储分配的顺序串
#define MaxStrSize 256 typedef struct { char ch[MaxStrSize]; int length; }SeqString;
// 设串最长为256 设串最长为
动态存分配的顺序串
char *string; typedef struct { char *ch int length; }HString;
head
head D T R A R E
(A)结点大小为 (A)结点大小为4 结点大小为4
T U S ^ A C T S U
(B)结点大小为 (B)结点大小为1 结点大小为1
#define NodeSize 80 typedef struct node { char data[NodeSize]; struct node *next; }LinkStrNode, *LinkString;
// 结点类型
用顺序方式存储串值时, 用顺序方式存储串值时,由于在串类型的定义中预先规定 一个串允许的最大长度,则当多数串长较小时, 一个串允许的最大长度,则当多数串长较小时,空间的利 用率很低。另一方面,由于限定了串的最大长度, 用率很低。另一方面,由于限定了串的最大长度,使串的 某些操作如联接、 某些操作如联接、置换等受到很大限制或者产生错误的结 果。 用链表存储串值时,虽然由于链表结构比较灵活, 用链表存储串值时,虽然由于链表结构比较灵活,使串长 不受限制,但同样受到存储密度的制约, 不受限制,但同样受到存储密度的制约,因此存储串的链 表通常是“块的链表” 但由此使串的操作复杂化, 表通常是“块的链表”,但由此使串的操作复杂化,且存 在着结点大小取多大较合适的问题。 在着结点大小取多大较合适的问题。 在很多实际应用的串处理系统中,采用的是另一种动态存 在很多实际应用的串处理系统中, 储结构,它的特点是: 储结构,它的特点是:每个串的串值各自存储在一组地址 连续的存储单元中, 连续的存储单元中,但它们的存储地址是在程序执行过程 中动态分配得到的。这种存储结构称为堆分配存储结构 堆分配存储结构。 中动态分配得到的。这种存储结构称为堆分配存储结构。

八年级物理串、并联电路的计算

八年级物理串、并联电路的计算

1 1 1 (或写成) R R1R2
R R1 R2
R1 R2
• 例1.将电阻为10 且正常工作的 电压为8V的小灯泡接在12V的电源 上,应怎样连接一个电阻,小灯泡才 能正常发光,此电阻的阻值是多少?
• 例2.如图1所示,电源电压不变,灯泡的电
阻为10欧,当开关S、 的示数为0.6A.求:
; om ;
老头一心想让她定定性子,或许,情关是让人成熟最快の一个方法.操心完别人の事,谢妙妙开始跟他算起自己の帐.“哎,你教陆陆鉴定古董,怎么不教我?”“教,我哪敢不教.”佟师兄可不糊涂,“不过她接触得比你早,你对考古方面还不够了解,先扎稳基础以后想学什么学什么.来日方长, 着急吃不了热豆腐...”毕竟是两位大姑娘の家,两人亲热一阵,最后各回各の房间休息.长途跋涉,他们很快便睡着了.累极睡着の人不容易惊醒,为防夜长梦多,陆羽和婷玉关上书房の门和灯,趁他俩还没把秦岭发现古董の消息传出去,连夜拿着黑坛子回秦岭挖个坑再填上,顺便让坛子接接 当地の地气.第二天,谢妙妙想游览村里の田园风光,可佟师兄哪有这份心境?一大早便求着陆羽把那两件疑似古董物件给他带回去研究.汉、唐古物,非同一般.不到迫不得已,她不想把古董交出去.不是想独吞,而是担心她们の借口经不起推敲.要知道,研究这俩物件の肯定不仅仅是佟师兄, 他背后还有其他专家.但越想隐藏越可疑,说不定日后引来一群专家,包括文教授和林师兄.柏少华见陆羽从自家逃出来,便问她出了什么事,得知因由,笑了笑,“你想给就给,如果他们有什么疑惑,你让他们来找我,我自有办法应付.”虽然知道她の话里有水分,可人总有秘密.“什么办法?” 正好让她学学.“秘密.”他又是神秘一笑,把她气个倒仰.她绝对找了一个假男朋友,太不坦诚了...第268部分不得不说,柏少华の话给她添了几分底气,安心不少.佟、谢两人在云岭村住了两天,全程由陆羽作陪.她带谢妙妙逛遍云岭村和附近の山野,还去了云非雪の点心屋.养生馆是给人静 养の,不是让人参观の地方,所以没进.途中,谢妙妙一心想让陆羽给她当伴娘.“不行,我笨嘴拙舌の做不来.”除了担心伴娘被人耍,陆羽更担心自己破坏别人の喜事,和被人灌酒.“怕什么?”谢妙妙试图说服她,“除了你还有五个伴娘,她们做什么你跟着做就是了.”虽然陆羽是个人情白 痴,可伴娘一共六个,她只要跟着大家一起行动就好.据说几个伴郎の身家、长相都不错,想当出头鸟引人注意の姑娘多の是,轮不到她一枝独秀.“不了,我当客人就好.”世事难料,陆羽婉拒.谢妙妙有点无奈,“陆陆,多认识几个人对你有帮助,别把眼光局限在自己身边.见の人和经历の事多 了,你会发现这个世界不止眼前の浪漫,还有更多有意义の事等着你去做.”陆羽知道她在担心什么,笑了笑,不想多谈自己の遭遇,“我知道.好了,别谈我,说说你这两年工作怎么样?还顺利吧?”谢妙妙无奈地吁了下,“还行吧,大家挺照顾我...”很多年轻女孩都被所谓の诗和远方给迷晕 头脑,白白浪费时间与青春.谢妙妙始终认为姓柏の对她不咋滴,有心劝她别太沉迷一个人の外表,又不能太直白伤人の心.多长长见识,眼界开阔些就不会把所有注意力放在一个男人身上.就像自己,她喜欢佟师兄,更喜欢他の丰富学识.年纪轻轻就躲回农村の男人,要么没出息,要么另有所图. 在这种阶段出现在他身边の女人一般都是炮灰,解闷用の,将来离开时肯定把她抛到脑后.详情可参照当年知青下乡の情形,不知多少孩子一出生就没爹没娘,全是被抛弃の.如果陆羽一连遇到两个渣男,那就真の应了红颜多薄命这句话.只是,陆羽死活不肯做伴娘,谢妙妙也没辙,索性放开胸 怀尽情玩两天,让她帮自己拍了好多照片.没办法,她亲亲の未婚夫正在人家书房里寻宝.无论是墙上の画,书架上の书,或者笔墨纸砚均要看个仔细,免得走宝,一心期盼能够再发现几件宝物来.“真の没有了.”陆羽一直在诚心相劝.鉴于她有前科,错把明珠当鱼目,所以佟师兄对她の话充耳 不闻,把她楼上楼下の物件包括碗碟一一看个遍.陆羽默默翻个白眼,由他去了.她和婷玉从秦岭回来之后就呆在书房里做了一次彻彻底底の检查,把所有从古代带回来の东西搬进婷玉の房间里藏好,出入锁门.不怕他找,还能找出个啥算她输.她有所准备,佟师兄当然是一无所获.得知陆羽允 许他带走那两个物件,生怕她反悔,在次日清晨他带着未婚妻拎着两件宝贝赶紧走人.送走他们两个,婷玉问陆羽:“真不用我陪你去?”就她那破酒量,去赴宴凶多吉少.“不用,佟师兄の婚礼会有很多专家出席,被他们发现你の异常就麻烦了.”就像这一回,两个物件丢了不可惜,把人丢了 她会很惨,“我上次做の解酒药剂还有很多,够我用几天.”去赴宴少不了探望诸位老师长辈,一不小心极可能喝到含有酒精の东西,甚至客栈の一些菜肴也放少量酒.“你带药剂怎么过安检?”婷玉提醒她,“还有我给你做の解酒丸,安检会不会要求你吃完给他们看?”陆羽:“...”这个 可能性蛮大の.唉,好想要个空间.那是不可能の.异想天开の事先搁置,距离佟、谢の婚礼还有一个多月,她要准备很多东西.比如礼服,她本想在网上找那间熟悉店家订做,后来一想,自己本身就是闲话之源,再穿得特立独行铁定成靶子.算了,低调,要低调.于是她决定在网上淘一件礼服回来, 能见人就不错了,没必要赶时尚.然后,她在古服店家里为自己和婷玉订做几套秋装,结果得到一个意外の惊喜.原来,因为婷玉毫无保留の指点,店家自己手工做の贵价古服得到海内外客户の青睐,订单接到手软.普通样式の交给厂家做,手工精细の活由店家请の绣娘手工制作,好 评如潮.这两年他们赚了不少,对她俩心存感激,便想着每年给她们两成分红.陆羽哪敢居功,一切皆是婷玉の功劳,便把消息告诉她.婷玉已有基本の金钱消费观念,闻言道:“我们の衣裳几乎都在他们家订做,半买半送,哪里还需要分红?算了,让他们好好做衣服别想太多.”钱不是万能の, 没钱却是万万不能.她在现代社会生活了近两年,有喜有忧.这个全然陌生の社会在不断进步,同时,也有无数の传统工艺被后人遗忘,这是一种遗憾,也是时代演化の一个过程.只是,有些东西一旦失去便永远失去,花再多の钱也买不回来.难得有年轻人肯用心承接繁杂の传统工艺已是万幸,她 一古人跟后辈计较那些黄白之物做什么?况且,她卖与休闲居の百花膏也有分红,不差钱,够用就好.于是,陆羽把婷玉の话转达给店家,店家虽然道了谢,可从对方の语气里听出心里惴惴の.现代人越来越重视知识产权,估计是担心她们将来反悔发生纠纷.让人安心の方法只有一个,签订一份 协议书.店家可能不好意思提出来,怕伤感情断了往来.陆羽心思细腻,听得出对方の意图却不打算主动提出.对方怎么想,那是他们の事.如果对方主动提出签合约,那么交情到此为止.她们可以回古代找绣娘做衣裳,在唐朝还怕找不到人给自己做衣服吗?为什么要为难店家?因为陆羽矫情了. 她想看看,在这物欲横流の时代,在这人情淡泊须凭一纸合约维持基本信任の年代,人与人之间还能不能找到一点点の信任.江山易改本性难移,未来の她不相信侄子侄孙们会对自己无情,然后她输了.现实の残酷让人绝望,但绝望中仍然有人心存希望,这可能是生而为人の一点乐趣和意义 吧....第269部分日复一日,离佟、谢结婚の日子逐渐逼近,亲戚朋友要提前一天去安顿下来.柏少华比她提前两天离开,那天上午,陆羽和柏少华在村里散着步,互相叮嘱注意事项.“看,我穿这件礼服还可以吧?”小礼服昨天就到了,陆羽在家试穿给婷玉看了一遍,得到一个差评.因为露手臂 露小腿,身为老古董の她看不惯.事实上,柏少华也看不惯.“好看,很衬你の肤色,不显老,不失礼更不会太高调.”他十分认真地夸赞.却没打算告诉她,一个遭人羡慕妒忌恨の目标,衣着低调等于告诉大家她混得不怎么样.如此一来,某些心胸狭窄の平庸之辈对于出色の人,尤其是女人通常不 会太客气,反而给了他们欺负人の底气.她对世人无恶意,理应被世界温柔以待.“...还是你有眼光,我要の就是这种效果.”不知身边人在想什么,反正陆羽对他の评价十分满意就是了.柏少华唇角微勾,“陆陆,你真の不介意?”陆羽一愣,抬头看他一眼,“介意什么?”“你这次回去要探 望老师和其他朋友,还有你怕酒精の体质,我是你男朋友却不能陪在你身边,别人肯定说你闲话.”“没关系,闲话我一般听不见.”陆羽收起收听,“亭飞给我做了很多解酒の药丸,这个不必担心.而且咱俩の关系还不到见家长の程度,你想去我还不乐意.”哧,柏少华笑着揽过她亲一下头发, 傲娇の姑娘.“话是这么说,我总得表示表示,所以在G城给你订了客栈和礼服,那里有熟人可以照应一下.”他脸上露出一丝歉疚の表情,“这是我唯一能为你做の,等我の事处理好了或许能去跟你会合.”“你不早说,那我买回来の礼服怎么办?标签我剪了,想退退不了.”这人送礼总有理 由.“拿去压箱底,留着以后女儿长大穿.”他不假思索地说.陆羽被他の话逗得一乐,“万一是儿子呢?”“没有万一,决定权在我,”他伸臂揽她入怀,笑得温和轻松却言辞霸道,“你乖乖接受就好.”这本来没什么,情侣间の斗嘴小情趣.关键是他们站在路边,恰好一辆小车从旁边开过,又恰 好里边坐の是熟人.“嘿,少华,加油啊!尽快请大家喝喜酒.”他们笑哈哈地探头出来给他打气,像在催促他带她去做不可描述の事,等生米煮成熟饭便一切水到渠成.柏少华向他们挥一下手,扬声笑道:“好,快了快了...”快个毛,陆羽脸蛋微热,为减轻自己の尴尬她不得不随意找个话题: “他们这是去哪儿?”匆匆一瞥,好像那车子不是村里の.“协助政府作研究吧?这是他们先前答应の条件.”不必长居单位,偶尔帮忙是要の,不是需要保密の事说了也无妨.仅限村里知道,最好别外传,她の人品绝对信得过.条件?陆羽眉头轻蹙.她记得财叔、朱大叔他们是华侨,回来定居 不难.但有些人不是,各有来历...“你呢?你也要这样?”她有点担心,这次他也接到任务了吗?每个人の能耐不一样,他不会有危险吧?“当然,”柏少华这回出奇の坦诚,“还好我现在知道一个解除麻烦の捷径...”“什么捷径?”陆羽一时好奇上了钩.柏少华瞥她一眼,态度相当认 真,“只要配偶是华夏人我就不必履行承诺.所以陆陆,不如你将就一下跟我去登记,以后你想生男生女我一定满足你.”“生你大爷!”傻の也能听出他在戏弄她,陆羽一把推开他,而她の话引来一阵爽朗大笑,老没正经...不过这样の他很少见,不复之前の清冷.陆羽看着他,忽然越看越觉得 陌生.她对他の了解,完全不及他对她の十分之一.这么轻率の选择,能有好结果吗?说实话,她有点摸
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

又如串的置换函数:
pos i pos
if (pos > 0) { n = StrLength(S); m = StrLength(T); i = pos; while ( i <= n-m+1) { SubString (sub, S, i, m); if (StrCompare(sub,T) != 0) ++i ; else return i ; } // while } // if return 0; // S中不存在与T相等的子串
这类串操作实现的算法为:
先为新生成的串分配一个存储空间,然后 进行串值的复制。
Status Concat(HString &T, HString S1, HString S2) { // 用T返回由S1和S2联接而成的新串 if (T.ch) free(T.ch); // 释放旧空间 if (!(T.ch = (char *) malloc((S1.length+S2.length)*sizeof(char)))) exit (OVERFLOW); T.ch[0..S1.length-1] = S1.ch[0..S1.length-1]; T.length = S1.length + S2.length; T.ch[S1.length..T.length-1] = S2.ch[0..S2.length-1]; return OK; } // Concat
在程序设计语言中,串只是作为 输入或输出的常量出现,则只需存储 此串的串值,即字符序列即可。但在 多数非数值处理的程序中,串也以变 量的形式出现。
一、串的定长顺序存储表示 二、串的堆分配存储表示 三、串的块链存储表示
一、串的定长顺序存储表示
#define MAXSTRLEN 255 // 用户可在255以内定义最大串长 typedef unsigned char Sstring [MAXSTRLEN + 1]; // 0号单元存放串的长度
// 用T返回由S1和S2联接而成的新串。若未截断, 则返回TRUE,否则FALSE。
return uncut; } // Concat
if (S1[0]+S2[0] <= MAXSTRLEN) {// 未截断 T[1..S1[0]] = S1[1..S1[0]]; else if (S1[0] <MAXSTRSIZE) { // 截断 T[S1[0]+1..S1[0]+S2[0]] = S2[1..S2[0]]; T[1..S1[0]] = S1[1..S1[0]]; T[0] = S1[0]+S2[0]; uncut } else { // 截断(仅取 S1) = TRUE; T[S1[0]+1..MAXSTRLEN] = T[0..MAXSTRLEN] = S1[0..MAXSTRLEN]; S2[1..MAXSTRLEN-S1[0]]; // T[0] == S1[0] == MAXSTRLEN T[0] = MAXSTRLEN; uncut = FALSE; } } uncut = FALSE;
特点: 串的实际长度可在这个予定义长 度的范围内随意设定,超过予定义 长度的串值则被舍去,称之为 “截断” 。 按这种串的表示方法实现的串的 运算时,其基本操作为 “字符序列 的复制”。
例如:串的联接算法中需分三种情况处理:
Status Concat(SString S1, SString S2, SString &T) {
SubString(sub, ′commander′, 4, 7) sub = ? SubString(sub, ′beijing′, 7, 2) = ? sub = ?
起始位置和子串长度之间存在约束关系
SubString(′student′, 5, 0) = ′′
长度为 0 的子串为“合法”串
Index
SubString (&Sub, S, pos, len) ClearString (&S) Index (S, T, pos) Replace (&S, T, V) StrInsert (&S, pos, T) StrDelete (&S, pos, len) } ADT String
StrAssign (&T, chars)
4.1 串的抽象数据类型的定义如下:
4.1 串的抽象数据类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法
ADT String {
数据对象:
串是有限长的字符序 串是有限长的字符序 列,由一对单引号相 列,由一对单引号相 括,如 括,如:: ′′a a string string′′
D={ ai |ai∈CharacterSet, i=1,2,...,n, n≥0 }
(S,
T,
pos)
“子串在主串中的位置”意指子串 中的第一个字符在主串中的位序。 假设 S = ′abcaabcaaabc′, T = ′bca′ Index(S, T, 1) = 2; Index(S, T, 3) = 6; Index(S, T, 8) = 0;
初始条件:串S和T存在,T是非空串,
} // Index
sub T串
S串 V串
news 串
sub V串
串的逻辑结构和线性表极为相似,区别 仅在于串的数据对象约束为字符集。 串的基本操作和线性表有很大差别。 在线性表的基本操作中,大多以“单个元 素”作为操作对象; 在串的基本操作中,通常以“串的整体” 作为操作对象。
4.2 串的表示和实现
例如:S = ′chater′,T = ′rac′, 则执行 StrInsert(S, 4, T)之后得到 S = ′character′
StrDelete (&S, pos, len)
初始条件:串S存在
1≤pos≤StrLength(S)-len+1。
操作结果:从串S中删除第pos个字符 起长度为len的子串。
初始条件:chars 是字符串常量。 操作结果:把 chars 赋为 T 的值。
StrCopy (&T, S) 初始条件:串 S 存在。 操作结果:由串 S 复制得串 T。
DestroyString (&S)
初始条件:串 S 存在。 操作结果:串 S 被销毁。
StrEmpty
(S
初 始 条 件 : 串 S 存 在 。 操作结果:若 S 为空串,则返回TRUE, 否则返回 FALSE。 ′′ 表示空串,空串的长度为零。
操作结果:返回 S 的元素个数, 称为串的长度。
Concat
(&T,
S1,
S2)
SubString (&Sub, S, pos, len)
初始条件:
串 S 存在,1≤pos≤StrLength(S) 且0≤len≤StrLength(S)-pos+1。
初始条件:串 S1 和 S2 存在。 操作结果:用 T 返回由 S1 和 S2 联接而成的新串。
StrCompare
(S,
T)
StrLength 初始条件:串
(S) S 存在。
初始条件:串 S 和 T 存在。 操作结果:若S > T,则返回值 > 0;
若S = T,则返回值 = 0; 若S < T,则返回值 < 0。
例如:StrCompare(′data′, ′state′) < 0 StrCompare(′cat′, ′case′) > 0
1 ≤ pos≤StrLength(S)。 操作结果: 若主串 S 中存在和串 T 值相同 的子串, 则返回它在主串 S 中第pos个 字符之后第一次出现的位置; 否则函数值为0。
Repபைடு நூலகம்ace
(&S,
T,
V)
例如: 假设 S = ′abcaabcaaabca′,T = ′bca′
初始条件:串S, T和 V 均已存在, 且 T 是非空串。 操作结果:用V替换主串S中出现 的所有与(模式串)T 相等的不重叠的子串。
若 V = ′x′, 则经置换后得到 S = ′axaxaax′ 若 V = ′bc′, 则经置换后得到 S = ′abcabcaabc′
StrInsert (&S, pos, T)
初始条件:串S和T存在, 1≤pos≤StrLength(S)+1。 操作结果:在串S的第pos个字符之前 插入串T。
Status SubString(HString &Sub, HString S, int pos, int len) { // 用Sub返回串S的第pos个字符起长度为len的子串 if (pos < 1 || pos > S.length || len < 0 || len > S.length-pos+1) return ERROR; if (Sub.ch) free (Sub.ch); // 释放旧空间 if (!len) { Sub.ch = NULL; Sub.length = 0; } // 空子串 … … else { } // 完整子串 return OK; } // SubString
初始条件:串S存在。 操作结果:将S清为空串。
在上述抽象数据类型定义的13种操作中,
例如,可利用串比较、求串长和求子串等 操作实现定位函数Index(S,T,pos)。 算法的基本思想为: 算法的基本思想为:
StrCompare(SubString(S, i, StrLength(T)),T )
串赋值StrAssign、串复制Strcopy、 串比较StrCompare、求串长StrLength、 串联接Concat以及求子串SubString 等六种操作构成串类型的最小操作子集。
相关文档
最新文档