字串Word文档下载推荐.docx

上传人:b****5 文档编号:19165465 上传时间:2023-01-04 格式:DOCX 页数:13 大小:33.82KB
下载 相关 举报
字串Word文档下载推荐.docx_第1页
第1页 / 共13页
字串Word文档下载推荐.docx_第2页
第2页 / 共13页
字串Word文档下载推荐.docx_第3页
第3页 / 共13页
字串Word文档下载推荐.docx_第4页
第4页 / 共13页
字串Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

字串Word文档下载推荐.docx

《字串Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《字串Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

字串Word文档下载推荐.docx

例如上例中的串a、b、c和d彼此都不相等。

值得一提的是,串值必须用一对单引号括起来,但单引号本身不属于串,它的作用只是为了避免与变量名或数的常量混淆而已。

例如在程序设计语言中

x='

123'

'

;

则表明x是一个串变量名,赋给它的值是字符序列123。

又如

tsing='

TSING'

中,tsing是一个串变量名,而字符序列TSING是其值。

在各种应用中,空格常常是串的字符集合中的一个元素,因而可以出现在其它字符中间。

由一个或多个空格组成的串'

'

称为空格串(blankstring,请注意:

此处不是空串)。

它的长度为串中空格字符的个数。

为了清楚起见,以后我们用符号"

0"

来表示"

空串"

串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集。

然而,串的基本操作和线性表有很大差别。

在线性表的基本操作中,大多以"

单个元素"

作为操作对象,如:

在线性表中查找某个元素、求取某个元素、在某个位置上插入一个元素和删除一个元素等;

而在串的基本操作中,通常以"

串的整体"

在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。

2串的抽象定义

串的抽象数据类型的定义如下:

基本操作:

StrAssign(&

T,chars)

初始条件:

chars是字符串常量。

操作结果:

生成一个其值等于chars的串T。

StrCopy(&

T,S)

串S存在。

由串S复制得串T。

StrEmpty(S)

若S为空串,则返回TRUE,否则返回FALSE。

StrCompare(S,T)

串S和T存在。

若S>

T,则返回值>

0;

若S=T,则返回值=0;

若S<

T,则返回值<

0.

StrLength(S)

返回S的元素个数,称为串的长度。

ClearSgring(&

S)

将S清为空串。

Contact(&

T,S1,S2)

串S1和S2存在。

用T返回由S1和S2联接而成的新串。

SubString(&

Sub,S,pos,len)

串S存在,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1.

用Sub返回串S的第pos个字符起长度为len的子串。

Index(S,T,pos)

串S和T存在,T是非空串,1≤pos≤StrLength(S).

若主串S中的存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;

否则函数值为0。

}

Replace(&

S,T,V)

串s,T和v存在,T是非空串。

用v替换主串s中出现的所有与T相等的不重叠的子串。

Strlnsert(&

S,pos,T) 

串S和T存在,l≤pos≤StrLength(S)+1。

在串S的第pos个字符之前插个串T. 

StrDelete(&

S,pos,len) 

串S存在,1≤pos≤StrLength(S)-len+1。

从串s中删除第pos个字符起长度为len的子串.

DestroyStrlng(&

串s存在。

串s被销毁。

}ADTString 

对于串的基本操作集可以有不同的定义方法,读者在使用高级程序设计语言中的串类型时,应以该语言的参考手册为准。

在上述抽象数据类型定义的13种操作中,串赋值StrAssign、串比较StrCompare、求串长StrLength、串联接Concat以及求子串SubStrin8等五种操作构成串类型的最小操作子集。

即:

这些操作不可能利用其他串操作来实现,反之,其他串操作(除串清除C1earString和串销毁DestroyString外)均可在这个最小操作子集上实现。

例如,可利用判等、求串长和求子串等操作实现定位函数Index(S,T,pos)。

算法的基本思想为:

在主串S中取从第i(i的初值为pos)个字符起、长度和串T相等的于串和

串T比较,若相等,则求得函数值为i,否则i值增1直至串S中不存在和串T相等的子

串为止。

如算法1所示。

intlndex(StringS,StringT,intpos){ 

//T为非空串。

若主串s中第pos个字符之后存在与T相等的于串,

//则返回第一个这样的子串在s中的位置,否则返回0 

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;

elsereturni;

//返回子串在主串中的位置

}//while

}//if

return0;

//S中不存在与T相等的子串

}//Index

算法1

3串操作应用举例

文本编辑

文本编辑程序是一个面向用户的系统服务程序,广泛用于源程序的输入和修改,甚至

用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色。

文本编辑的实质是修

改字符数据的形式或格式。

虽然各种文本编辑程序的功能强弱不同,但是其基本操作是

一致的,一般都包括串的查找,插入和删除等基本操作。

为了编辑的方便,用户可以利用换页符和换行符把文本划分为若干页,每页有若干行

(当然,也可不分页而把文件直接划成若干行)。

我们可以把文本看成是一个字符串,称为

文本串。

页则是文本串的子串,行又是页的子串。

比如有下列一段源程序

main(){

float 

a,b,max;

scanf("

%f,%f"

&

a,&

b);

ifa>

bmax=a

elsemax=b;

我们可以把此程序看成是一个文本串.输入到内存后如图所示.图中"

/"

为换行符.

为了管理文本串的页和行,在进入文本编辑的时候,编辑程序先为文本串建立相应的

页表和行表,即建立各子串的存储映象。

页表的每一项给出了页号和该页的起始行号。

而行表的每一项则指示每一行的行号、起始地址和该行子串的长度。

假设图4.7所示文

本串只占一页,且起始行号为100,则该文本串的行表如图所示。

文本编辑程序中设立页指针、行指针和字符指针,分别指示当前操作的页、行和字符。

如果在某行内插入或删除若干字符,则要修改行表中该行的长度。

若该行的长度超出了

分配给它的存储空间,则要为该行重新分配存储空间,同时还要修改该行的起始位置。

果要插入或删除一行,就要涉及行表的插入或删除。

若被删除的行是所在页的起始行,则

还要修改页表中相应页的起始行号(修改为下一行的行号)。

为了查找方便,行表是按行

号递增顺序存储的,因此,对行表进行的插入或删除运算需移动操作位置以后的全部表

项。

页表的维护与行表类似,在此不再赘述。

由于访问是以页表和行表作为索引的,所以

在作行和页的删除操作时,可以只对行表和页表作相应的修改,不必删除所涉及的字符。

这可以节省不少时间。

/*========================================*/

/* 

输入字串且将之印出 

*/

#include<

stdio.h>

voidmain()

{

charstring[100];

/*字串阵列宣告 

*/

charch;

/*输入字元 

inti;

for(i=0;

i<

100;

i++) 

/*清除字串阵列内容*/

string[i]='

putchar('

?

);

/*列出提示输入讯息*/

i=0;

while((ch=getchar())!

='

\n'

) 

/*输入字元 

{

string[i]=ch;

/*存入字串内 

i++;

}

/*印出字串内容 

putchar(string[i]);

/*换行 

string[i]='

\0'

/*加结束字元 

string[i]!

i++)

/*印出字串内容 

使用字元阵列来储存格式字串 

charformat[]={'

T'

'

h'

e'

s'

c'

o'

r'

i'

%'

d'

};

intscore;

/*成绩 

score=100;

/*设定成绩内容*/

printf("

使用正常的格式化字符串\n"

/*印出结果 

Thescoreis%d\n"

score);

使用字符数组的格式化字符串\n"

printf(format,score);

(插入影象16-5)

/*列出提示输入讯息 

i=1;

/*从第二个元素开始 

string[0]=i-1;

/*存入字串长度 

for(i=1;

=string[0];

/*印出字串内容*/

/*----------------------------------------*/

计算字串长度 

intstrlen(char*str)

str[i]!

i++);

/*用回路计算长度*/

returni;

主程式:

读入字串後,印出字串长度 

/*字串阵列宣告 

intlen;

/*字串长度 

请输入字符串==>

"

gets(string);

/*读取字串 

len=strlen(string);

/*计算字串长度 

输入字符串长度是%d\n"

len);

(插入影象16-7)

字串拷贝 

char*strcpy(char*str1,char*str2)

str2[i]!

i++)

str1[i]=str2[i];

/*拷贝字串内容*/

str1[i]='

/*设定字串结束*/

returnstr1;

读取字串後,将它做备份. 

/*原始字串宣告*/

charbackup[100];

/*备份字串宣告*/

/*读取字串 

strcpy(backup,string);

/*拷贝子字串 

原始字符串%s\n"

string);

/*印出原始字串*/

备份字符串%s\n"

backup);

/*印出备份字串*/

结合两字串 

char*strcat(char*str1,char*str2)

inti,j;

str1[i]!

i++);

/*找字串str1结束*/

for(j=0;

str2[j]!

j++) 

/*拷贝字串内容 

str1[i+j]=str2[j];

str1[i+j]='

/*设定字串结束 

输入二字串後,将之结合成一字串.*/

charstring1[200];

/*字串阵列1宣告*/

charstring2[100];

/*字串阵列2宣告*/

请输入字符串

(1)==>

gets(string1);

/*读取字串1 

请输入字符串

(2)==>

gets(string2);

/*读取字串2 

strcat(string1,string2)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1