版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公環(huán)境的舒適度與創(chuàng)意設(shè)計(jì)
- 2025中國(guó)聯(lián)通青海分公司春季校園招聘35人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)系統(tǒng)校園招聘技術(shù)類提前批高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)石化中原油田分公司畢業(yè)生招聘182人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)電信湖北鄂州分公司招聘7人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)電信北京公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)建設(shè)基礎(chǔ)設(shè)施限公司招聘100人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中共海南省委黨校省行政學(xué)院省社會(huì)主義學(xué)院公開招聘教研崗位專業(yè)技術(shù)人員16人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年貴州六盤水市事業(yè)單位及國(guó)企業(yè)招聘應(yīng)征入伍大學(xué)畢業(yè)生136人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年湖北廣水市事業(yè)單位招聘98人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年-電大《中央銀行理論與實(shí)務(wù)》期末復(fù)習(xí)資料(作業(yè)、藍(lán)本、學(xué)習(xí)指導(dǎo)(黃本)、試卷)8
- 小學(xué)校門口突發(fā)問(wèn)題應(yīng)急預(yù)案(5篇)
- 雙方共同招工協(xié)議書(2篇)
- 2021-2022學(xué)年第二學(xué)期《大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)2》學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 國(guó)家開放大學(xué)電大本科《工程經(jīng)濟(jì)與管理》2023-2024期末試題及答案(試卷代號(hào):1141)
- 醫(yī)院勞務(wù)外包服務(wù)方案(技術(shù)方案)
- 2023年肝糖原的提取鑒定與定量實(shí)驗(yàn)報(bào)告
- 2012雷克薩斯lx570lx460原廠中文維修手冊(cè)
- 主要原材料價(jià)格趨勢(shì)分析圖
- 10kV無(wú)功補(bǔ)償裝置安裝施工技術(shù)措施要點(diǎn)
- 公共衛(wèi)生導(dǎo)論復(fù)習(xí)資料
評(píng)論
0/150
提交評(píng)論