數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用第四章

字符串的應(yīng)用【實(shí)驗(yàn)?zāi)康摹?/p>

1.熟練掌握字符串的數(shù)據(jù)類型定義以及字符串的五種基本操作的定義,并能利用這些基本操作實(shí)現(xiàn)字符串的其他基本操作的方法。

2.熟練掌握字符串串的定長(zhǎng)順序存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)字符串的各種操作的方法。

3.理解字符串的堆分配存儲(chǔ)表示以及在其上實(shí)現(xiàn)字符串操作的基本方法。

4.熟練掌握串的基本操作類型的實(shí)現(xiàn)方法,其中文本模式匹配方法是一個(gè)難點(diǎn),在掌握了BF算法的基礎(chǔ)上理解改進(jìn)的KMP算法。

5.了解一般文字處理軟件的設(shè)計(jì)方法。第一節(jié)

知識(shí)準(zhǔn)備

一、有關(guān)串幾個(gè)重要概念

1.串(字符串):零個(gè)或多個(gè)字符組成的有限序列。一般記作s="a1a2

…an"(n≥0)

2.長(zhǎng)度:串中字符的數(shù)目

3.空串:零個(gè)字符的串,其長(zhǎng)度為零

4.子串和主串:串中任意個(gè)連續(xù)的字符組成的子序列稱為該串的子串;包含子串的串相應(yīng)地稱為主串,字符在序列中的序號(hào)為該字符在串中的位置。

5.當(dāng)兩個(gè)串的長(zhǎng)度相等,并且各個(gè)對(duì)應(yīng)位置的字符都相等時(shí)稱為兩串相等。

6.空格串:由一個(gè)或多個(gè)空格組成的串‘’,同空串是完全不同的。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第1頁(yè)。二、串的抽象數(shù)據(jù)類型定義

ADT

String{

數(shù)據(jù)對(duì)象:D={

|

∈CharacterSet,

i=1,2,...,n,

n>=0}

數(shù)據(jù)關(guān)系:R1={<

,

>|

,

∈D,

i=2,...,n}

基本操作:

Assign(&s,t)將串t的值賦給串

s

Create(&s,ss)將串s的值設(shè)定為字符序列ss

Equal(s,t)判定串s和串t是否相等

Length(s)

求串s的長(zhǎng)度

Concat(&s,t)

將串s和串t連接成一個(gè)串,結(jié)果存于s中

Substr(&sub,s,start,len)

從s的第start個(gè)字符起,取長(zhǎng)為len的子串存于sub

Index(s,t)

求子串t在主串s中第一次出現(xiàn)的位置

Replace(&s,t,v)以串v替換串s中的所有的非空子串t

Insert(&s,pos,t)在串s的第pos個(gè)字符之前插入串t;

Delete(&s,pos,len)從串s中刪去從第pos個(gè)字符起長(zhǎng)度為len的子串;

}

ADT

String

三、串的存儲(chǔ)結(jié)構(gòu)

1.定長(zhǎng)順序存儲(chǔ)表示

用一組地址連續(xù)的存儲(chǔ)單元來(lái)存放字符序列,并約定該結(jié)構(gòu)能存放字符的個(gè)數(shù)。

#define

MAXLEN

字符最大個(gè)數(shù)

typedef

struct

{int

len;

char

ch[MAXLEN];

}

SString;

2.堆分配存儲(chǔ)表示

系統(tǒng)先分配一個(gè)容量很大的地址連續(xù)的存儲(chǔ)空間作為字符串的存放空間,每建立一個(gè)新串,系統(tǒng)從該空間中分配一個(gè)大小和串長(zhǎng)相同的空間來(lái)存放新串。

typedef

Struct

{

char

*ch

;

//存儲(chǔ)空間基址

int

length;

//串的長(zhǎng)度

}Hstring;

3.串的塊鏈存儲(chǔ)表示

用鏈表形式來(lái)存儲(chǔ)串,如果以串中每一個(gè)字符作為一個(gè)結(jié)點(diǎn),使得相應(yīng)的存儲(chǔ)占用量增大,因此可采用將多個(gè)字符作為一個(gè)結(jié)點(diǎn)的形式來(lái)形成鏈表(即塊鏈形式)

#define

MAX

80

//用戶定義塊的大小

typedef

struct

str

{char

ch[MAX];

struct

str

*next;

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第2頁(yè)。

}Chunk;

typedef

struct

string

{

Chunk

*head,*tail;

int

length;

}LString

在串的處理操作中,我們可視不同的情況進(jìn)行選擇使用不同的定義形式,當(dāng)對(duì)字符串進(jìn)行連接,刪除等操作時(shí),采用鏈結(jié)構(gòu)更為方便上些,但采用鏈結(jié)構(gòu)在進(jìn)行串的截取(求子串)等操作時(shí)則比采用數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第1頁(yè)。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第2頁(yè)。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第3頁(yè)。第二節(jié)

串的基本操作示例

【問(wèn)題描述】用C語(yǔ)言實(shí)現(xiàn)串的一些基本操作算法。

【數(shù)據(jù)描述】

采用靜態(tài)存儲(chǔ)結(jié)構(gòu)來(lái)表示串,用一維字符數(shù)組來(lái)存放字符序列,用整數(shù)len來(lái)表示當(dāng)前串實(shí)際長(zhǎng)度。

#define

STRINGMAX

81

//串最多存放字符的個(gè)數(shù)

struct

string

{int

len;

char

ch[STRINGMAX];

};

typedef

struct

string

STRING;

【C源程序】

本程序只設(shè)計(jì)了串的創(chuàng)建,聯(lián)接,求子串和刪除操作,其余各基本操作可在本程序基礎(chǔ)上進(jìn)行改進(jìn),補(bǔ)充。

#include

"stdlib.h"

#include

"stdio.h"

#define

STRINGMAX

81

#define

LEN

sizeof(struct

string)/*

串的定義*/

struct

string

{int

len;

char

ch[STRINGMAX];

};

typedef

struct

string

STRING;

void

creat(STRING

*s);

void

print(STRING

*s);

void

concat(STRING

*s,STRING

*t);

STRING

*substr(STRING

*s,int

start,int

len);

void

delete(STRING

*s,int

start,int

len);

main()

{STRING

*s,*t,*v;

/*定義三個(gè)采用靜態(tài)存儲(chǔ)形式的串*/

int

start,len;

int

position;

t=(STRING

*)malloc(LEN);

/*為三個(gè)串分配相應(yīng)的存儲(chǔ)空間*/

s=(STRING

*)malloc(LEN);

v=(STRING

*)malloc(LEN);

printf("please

input

the

string

s:");

/*創(chuàng)建S串*/

creat(s);

printf("please

input

the

string

t:");

/*創(chuàng)建T串*/

creat(t);

concat(s,t);

/*

連接并輸出相應(yīng)的串*/

printf("the

new

string

s

:");

print(s);

printf("plese

input

the

start

position:");/*輸入截取子串的起始位置*/

scanf("%d",&start);

printf("please

input

the

length:");

/*輸入截取子串的長(zhǎng)度*/

scanf("%d",&len);

v=substr(s,start,len);

/*截取子串*/

printf(“the

substring

:”);

print(v);

printf("plese

input

the

start

position:");

/*

輸入刪除串的起始位置*/

scanf("%d",&start);

printf("please

input

the

length:");

/*

輸入刪除串的長(zhǎng)度*/

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第4頁(yè)。

scanf("%d",&len);

delete(s,start,len);

/*刪除串*/

printf("the

deleted

string

s

:");

print(s);

}

void

delete(STRING

*s,int

start,int

len)

{

int

i;

if

(start<=s->len&&len>=0&&start+len<=s->len)/*刪除操作合法性驗(yàn)證*/

{for(i=start+len;i<=s->len;i++)

/*從start位置開始移動(dòng)元素*/

s->ch[i-len]=s->ch[i];

s->len=s->len-len;

/*置新的長(zhǎng)度*/

}

else

printf("cannot

delete!\n");

}

STRING

*substr(STRING

*s,int

start,int

len)

{int

i;

STRING

*t;

t=(STRING

*)malloc(LEN);

if

(start<0&&start>=s->len)

/*取子串的合法性驗(yàn)證*/

return(NULL);

else

if

(len>=1&&len<=s->len-start)

{

for(i=0;i<len;i++)

/*取字符序列入到子串的字符數(shù)組中*/

t->ch[i]=s->ch[start+i];

t->len=len;

/*置子串長(zhǎng)度*/

t->ch[i]='\0';

return(t);

}

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第5頁(yè)。

else

return(NULL);

}

void

concat(STRING

*s,STRING

*t)

{

int

i,j;

if

(s->len+t->len>(STRINGMAX-1))

/*連接操作合法性驗(yàn)證*/

printf("too

long!cannot

concat!!");

else

{j=s->len;

for

(i=0;i<t->len;i++)

s->ch[i+j]=t->ch[i];

/*將串t中字符序列放入串s的尾部*/

s->ch[i+j]=

'\0

';

s->len=s->len+t->len;

/*置新串s的長(zhǎng)度*/

}

}

void

creat(STRING

*s)

{char

c;

int

i;

for

(i=0;((c=getchar())!='\n

'&&i<80);i++)

s->ch[i]=c;

/*將輸入的字符序列放入串的字符數(shù)組中*/

s->len=i;

/*置串的長(zhǎng)度*/

s->ch[i]=

'\0

';

}

void

print(STRING

s)

/*輸出串的字符序列*/

{int

i;

for

(i=0;s->ch[i]!=

'\0

';i++)

printf("%c",s->ch[i]);

printf("\n");

}

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第6頁(yè)。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第3頁(yè)。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第4頁(yè)。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第5頁(yè)。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第6頁(yè)。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第7頁(yè)。第三節(jié)字符串操作演示系統(tǒng)

【問(wèn)題描述】

用戶自己實(shí)現(xiàn)串類型,并寫一個(gè)串的基本操作的演示系統(tǒng)。在該演示系統(tǒng)中能提供命令行的輸入,并能對(duì)輸入的命令行進(jìn)行簡(jiǎn)單的編譯并作相應(yīng)的出錯(cuò)處理,最后根據(jù)命令動(dòng)詞功能來(lái)執(zhí)行命令行。命令定義如下:

1.賦值:assign

串名1

串名2

例如輸入命令

assign

ss

tt

操作的結(jié)果是將串tt賦值給了ss串

2.新建:creat

串名

字符串常量

例如輸入命令

creat

ss

'abcdefg

'

操作的結(jié)果是將字符串常量賦值給串ss,注意:字符串常量?jī)蛇呌脝我?hào)括起來(lái),不能省略。

3.判等:

equal

串名1

串名2

例如輸入命令

equal

ss

tt

操作的結(jié)果是根據(jù)兩串比較的結(jié)果輸出相應(yīng)的信息

4.求串長(zhǎng):length

串名

操作的結(jié)果是返回字符串長(zhǎng)度

5.字符串連接:

concat

串名1

串名2

新串名

例如輸入命令

concat

ss

tt

v

操作的結(jié)果是將串ss和串tt連接起來(lái)(ss在前,tt在后)形成一個(gè)新串,并輸出新串

6.求子串:

substr

串名

起始位置

子串長(zhǎng)度

新子串名

例如輸入命令

substr

ss

1

3

t

操作的結(jié)果是將串ss從起始位置1開始的3

個(gè)字符存入到串t中

7.子串定位:

index

串名1

串名2

起始位置

例如輸入命令

index

ss

t

1

操作的結(jié)果是返回串t在串ss從第1個(gè)字符后的字符序列中第一次出現(xiàn)的位置

8.退出:

quit

功能:結(jié)束演示系統(tǒng)運(yùn)行

【數(shù)據(jù)描述】

1.定義串的數(shù)據(jù)類型為指向字符的指針

typedef

char

*STRING;/*定義新的字符串類型,即指向字符的指針*/

2.在本程序中支持串名操作,因此需將各字符串所對(duì)應(yīng)的串名和首地址都存放在一個(gè)串頭表中

struct

strheadlist

{STRING

strhead[100];

/*字符串首地址*/

STRING

strname[100];

/*字符串的串名*/

int

curnum;

/*當(dāng)前串頭表中串的數(shù)目*/

}

3.對(duì)于提示符下輸入的每一行命令,在進(jìn)行分析以后,需要保留分析的結(jié)果(參數(shù)最多有6個(gè))

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第8頁(yè)。

struct

result

{int

num;

/*命令行中參數(shù)的個(gè)數(shù)(含命令動(dòng)詞)*/

int

nametype[6];

/*命令行中各參數(shù)的類型*/

STRING

str[6];

/*命令行中各參數(shù)都以字符串的形式返回*/

}

注:參數(shù)類型以整型表示,如為1,則表示參數(shù)為命令動(dòng)詞;

如為2,則表示參數(shù)為字符串

如為3,則表示參數(shù)為整數(shù)

如為4,則表示參數(shù)為串名

可以仿照DOS操作系統(tǒng)來(lái)進(jìn)行設(shè)計(jì),提供命令行提示符,并能輸入相應(yīng)命令,并將命令行拆分為不同的幾個(gè)部分(類似統(tǒng)計(jì)單詞個(gè)數(shù)),再根據(jù)編譯的結(jié)果進(jìn)行相應(yīng)的處理。

【C源程序】

#include

"stdlib.h"

#include

"stdio.h"

typedef

char

*STRING;

/*定義新的字符串類型,即指向字符的指針*/

struct

strheadlist

{STRING

strhead[100];

STRING

strname[100];

int

curnum;

};

/*定義指向字符串的字針數(shù)組,并存放各字符串的串名(串名也用字符串來(lái)表示),及當(dāng)前堆中串的數(shù)目*/

struct

result

{int

num;

int

nametype[6];

STRING

str[6];

};

/*定義命令行編譯以后形成的命令及參數(shù)等數(shù)據(jù)*/

int

strtoint(STRING

s);

void

creat(STRING

s,STRING

ss);

void

assign(STRING

s,STRING

t);

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第9頁(yè)。

int

equal(STRING

s,STRING

t);

int

length(STRING

s);

void

concat(STRING

s,STRING

t,STRING

v);

void

substr(STRING

s,int

start,int

len,STRING

v);

int

index(STRING

s,STRING

t,int

start);

struct

result

cmdsyna(int

row);

int

lookup(STRING

s);

struct

strheadlist

head;

char

cmd[40][80];

main()

{

struct

result

comm;

int

row=0,i;

char

c;

int

equ;

head.curnum=0;

while(1)

/*重復(fù)輸入并處理相應(yīng)命令*/

{

printf("CMD>");

for

(i=0;(c=getchar())!='\n

';i++)

cmd[row][i]=c;

cmd[row][i]=

'\0

';

comm=cmdsyna(row);/*對(duì)各命令動(dòng)詞進(jìn)行判數(shù)并作參數(shù)分析*/

if

(strcmp(comm.str[0],"creat")==0)/*字符串創(chuàng)建*/

{if

(comm.num!=2)

printf("Parameters

is

wrong!\n");

else

if

(lookup(comm.str[1])!=-1)

printf("String

%s

cannot

be

creat!\n");

else

{if

(type[1]==4

&&

type[2]==2)

creat(comm.str[1],comm.str[2]);

}

}

else

if

(strcmp(comm.str[0],"assign")==0)/*字符串賦值*/

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第10頁(yè)。

{if

(comm.num!=2)

printf("Parameters

is

wrong!\n");

else

assign(comm.str[1],comm.str[2]);

}

else

if

(strcmp(comm.str[0],"equal")==0)/*字符串判等*/

{if

(comm.num!=2)

printf("Parameters

is

wrong!\n");

else

{if

(lookup(comm.str[1])==-1||lookup(comm.str[2])==-1)

printf("String

%s

or

%s

is

not

found!\n",comm.str[1],comm.

str[2]);

else

{if

(equal(head.strhead[lookup(comm.str[1])],

head.strhead[lookup(comm.str[2])])==1)

printf("Equal!!!\n");

else

printf("Not

equal!!!\n");

}

}

}

else

if

(strcmp(comm.str[0],"length")==0)/*字符串求長(zhǎng)*/

{if

(comm.num!=1)

printf("Parameters

is

wrong!\n");

else

{if

(lookup(comm.str[1])==-1)

printf("The

string

%s

connot

be

found!\n");

else

printf("String

%s

:%s

length

is

%d\n",comm.str[1],

head.strhead

[lookup(comm.str[1])],length(head.strhead[lookup(comm.str[1])]));

}

}

else

if

(strcmp(comm.str[0],"concat")==0)/*字符串連接并形成新的字符串*/

{if

(comm.num!=3)

printf("Parameters

is

wrong!\n");

else

{

if

(lookup(comm.str[1])==-1||lookup(comm.str[2])==-1)

printf("The

string

%s

or

%s

is

not

found!\n",

comm.str[1],comm.str[2]);

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第11頁(yè)。

else

if

(lookup(comm.str[3])!=-1)

printf("String

%s

connot

be

creat!\n",

comm.str[3]);

else

concat(head.strhead[lookup(comm.str[1])],

head.strhead[lookup(comm.str[2])],comm.str[3]);

}

}

else

if

(strcmp(comm.str[0],"substr")==0)/*取字符串子串,并形成新的字符串*/

{if

(comm.num!=4)

printf("Parameters

wrong!\n");

else

{if

(lookup(comm.str[1])==-1)

printf("String

%s

is

not

found!\n",comm.str[1]);

else

{if

(lookup(comm.str[4])!=-1)

printf("String

%s

connot

be

creat!\n",comm.str[4]);

else

{int

start,len;

start=strtoint(comm.str[2]);

len=strtoint(comm.str[3]);

substr(head.strhead[lookup(comm.str[1])],start,

len,comm.str[4]);

}

}

}

}

else

if

(strcmp(comm.str[0],"index")==0)/*字符串定位*/

{if

(comm.num!=3)

printf("Parameters

wrong!\n");

else

{if

(lookup(comm.str[1])==-1||lookup(comm.str[2])==-1)

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第12頁(yè)。printf("String

%s

or

%s

is

not

found!\n",

comm.str[1],comm.str[2]);

else

{int

start,flag=-1;

start=strtoint(comm.str[3]);

flag=index(head.strhead[lookup(comm.str[1])],head.strhead[lookup(comm.str[2])],start);

if

(flag==-1)

printf("String

%s

start

%d

,

String

%s

is

not

index!!!\n",comm.str[1],start,comm.str[2]);

else

printf("String

%s

start

%d

,String

%s

is

index

%d!!!\n",

comm.str[1],start,comm.str[2],flag);

}

}

}

else

if

(strcmp(comm.str[0],"quit")==0)/*退出演示系統(tǒng)*/

{printf("Bye

Bye!\n");

break;

}

else

printf("Bad

filename

or

no

command!\n");/*錯(cuò)誤命令動(dòng)詞提示*/

row++;

}

}

int

strtoint(STRING

s)/*將字符串轉(zhuǎn)換成整數(shù)常量*/

{

int

i=0;

int

total=0;

while(s[i]!=

'\0

')

{total=total*10+s[i]-48;

i++;

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第13頁(yè)。

}

return(total);

}

int

lookup(STRING

s)

/*查找串表中是否存在串名所對(duì)應(yīng)的字符串,如存在則返回所對(duì)應(yīng)的位置,否則返回-1*/

{int

i;

int

look=-1;

for

(i=0;i<head.curnum;i++)

if

(strcmp(head.strname[i],s)==0)

{look=i;

break;

}

if

(look==head.curnum)

look=-1;

return(look);

}

struct

result

cmdsyna(int

row)

/*對(duì)輸入的命令行進(jìn)行編譯*/

{int

i;

struct

result

res;

char

c;

int

word=0,start;

res.num=-1;

for(i=0;(c=cmd[row][i])!=

'\0

';i++)

{

if(c==

'

')

{word=0;

cmd[row][i]=

'\0

';

}

else

if

(word==0)

/*出現(xiàn)了一個(gè)新的參數(shù),將分離出的各參數(shù)以及命令動(dòng)詞放置于參數(shù)表中*/

{res.num++;

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第14頁(yè)。

start=i;word=1;

res.str[res.num]=&cmd[row][start];

if

(res.num==0)

type[res.num]=1;

else

if

(cmd[row][start]==39)

{cmd[row][start]=

'\0

';

res.str[res.num]=&cmd[row][start+1];

type[res.num]=2;

}

else

{if

(cmd[row][start]>=

'0

'&&cmd[row][start]<=

'9

')

type[res.num]=3;

else

type[res.num]=4;

}

}

else

{if

(type[res.num]==2

&&

c==39)

cmd[row][i]=

'\0

';

/*處理參數(shù)中字符串常量*/

if

(type[res.num]==3

&&(c<'0'||c>'9'))

cmd[row][i]=

'\0';

/*處理參數(shù)中整數(shù)常量*/

}

}

return(res);

}

int

index(STRING

s,STRING

t,int

start)

/*從串S起始置START開始查找串T,如找到,則返回第一次出現(xiàn)的位置,否則返回-1*/

{

int

i,j;

if

((start<0)||(start+length(t)>length(s))||(length(t)==0))

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第15頁(yè)。

return(-1);

else

{i=start;

j=0;

while

(i<length(s)&&j<length(t))

{

if

(s[i]==t[j])

{i++;j++;}

else

{i=i-j+1;j=0;}

}

}

if

(j==length(t))

return(i-length(t));

else

return(-1);

}

void

substr(STRING

s,int

start,int

len,STRING

v)

/*為新串開辟新的空間,并將從串S中START起始位置起取LEN長(zhǎng)度的子串存放起來(lái),把新串的串名和首地址存放于串表中*/

{int

i;

char

ch[80];

if

(start<0&&start>=length(s))

printf("Cannot

be

substr!!!\n");

else

{if

(len>=1&&len<=length(s)-start)

{

head.strname[head.curnum]=v;

head.strhead[head.curnum]=ch;

for(i=0;i<len;i++)

ch[i]=s[start+i];

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)四字符串的應(yīng)用全文共20頁(yè),當(dāng)前為第16頁(yè)。

ch[i]=

'\0';

head.curnum++;

printf(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論