串的基本操作演示实验报告

绝世美人儿
610次浏览
2021年02月11日 03:46
最佳经验
本文由作者推荐

-

2021年2月11日发(作者:最后的日子)


串的基本操作演示实验报告




学号:



姓名:



班级:


第



1


页



共



11


页



一.实验环境问题描述:







如果语 言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写


一个涉及串操作的软 件系统时,用户必须自己实现串类型。试实现串类型,并写一


个串的基本操作的演示系统 。




基本要求:



在教科书


4.2.2


节用堆分配存储表示实现


HString< /p>


串的最小操作子集的


基础上,


实现串抽象 数据类型的其余基本操作


(不使用


C


语 言本身提供的串函数)


。


参数合法性检查必须严格。

< p>


说明:


(在格式中,Φ表示

0


个、


1


个或多个空格所组


成的串。


〈串标识〉表示一个内部名或一个串文字。前者是一个串的唯 一标识,是


一种内部形式的(而不是字符形式的)标识符。后者是两端由单引号括起来的 仅可


打印字符组成的序列。串内每两个连续的单引号表示一个单引号符。


)




利用上述基本操作函数 构造以下系统:它是一个命令解释程序,循环往复地处理用


户键入的每一条命令,直至终 止程序的命令为止。命令定义如下:




(


1


)



赋值。格式:


A


Φ〈串标识〉Φ〈回车〉< /p>




用〈串标识〉所表示的值建立新串, 并显示新串的内部名和串值。如:


A


′


Hi


!′




(


2


)



判相等。



格式:

E


Φ〈串标识


1


〉Φ〈串标识


2


〉Φ〈回车〉




若两串相等,则显示“


EQUAL


”< /p>


,否则显示“


UNEQUAL


”


。




(


3


)



联接。



格式:


C


Φ〈串标识


1


〉Φ〈串标识


2


〉Φ〈回车〉




将两串联接产生结果串,它的内部名和串值都显示出来。




(


4


)



求长度



格式:


L


Φ〈串标识〉Φ〈回车〉



显示串的长度。




(


5


)



求子串



格式:


S


Φ〈串标识〉Φ


+


〈数

< p>
1


〉Φ


+


〈数

< p>
2


〉Φ〈回车〉




如果参数合法,则显示子串的内部名和串值。


〈数〉不带正负号。< /p>




(


6


)子串定位。



格式:


I


Φ〈串标识


1


〉Φ〈串标识


2


〉Φ〈回车〉




显示第二个串在第一个串中首次出现时的位置。




(


7


)串替换



格式:


R


Φ〈串标识

< br>1


〉Φ〈串标识


2


〉Φ〈串标识


2


〉Φ〈回车〉




将第一个串中出现所有出现的第二个串用第三个串替换,显示 结果串的内部名和串


值,原串不变。





(


0


)退出



格式:


Q


Φ〈回车〉

< br>


结束程序的运行。





二、实验内容



第



2


页



共



11


页



编 写一个程序,实现


顺序串


的各种基本运算,并在此基础上设计一 个主程序。具体如下:




编写栈的基本操作函数



顺序串类型定义如下所示:



typedef struct node


{


char data;


struct node *next;


}linkstring;


(


1


)串赋值



Assign(s,t)


将一个字符串常量赋给串

< p>
s,


即生成一个其值等于


t


的串


s


(


2


)串复制



StrCopy(s,t)


将串


t< /p>


赋给串


s


(


3


)计算串长度



StrLength(s)


返回串


s


中字符个数



(


4


)判断串相等


StrEqual(s,t)


若两个串


s


与


t

< p>
相等则返回


1


;否则返回


0


。



(


5


)串连接




Concat(s,t)



返回由两个串


s


和


t


连接在一起形成的新串。



(


6


)求子串



index(s,j)


返回找到串


t


在串


s


中的位置






(


7


)插入


InsStr (s,i,t)


将串


t


插入到串


s


的第


i(1


≤< /p>


i


≤


StrLength(s)+1)< /p>


个字符中


,


即将


t


的第一个字符作为


s


的第

< p>
i


个字符


,


并返回产生的 新串



(


8


)串删除



DelStr (s,i,j)


从串


s


中删去从第


i(1


≤


i


≤


StrLength(s))

个字符开始的长度为


j


的子串


,< /p>


并返回产生的


新串。



(


9


)串替换



RepStr (s,s1,s2)


在串

s


中


,


将所有出现的子串


s1


均替换成


s2


。< /p>



(


10


)输出 串


DispStr(s)


输出串


s< /p>


的所有元素值



(


11


)判断串是否为空




IsEmpty(s)


(


12


)输入串


inputchuan(char


str[100],linkstring


*&s)


输入字符串


str


并将字符串传递给指针


串


s


三:程序



:


#include


#include


#include


typedef struct node


{



char data;



struct node *next;


}linkstring;


void assign(linkstring *&s,char t[])//


将字符串


t


赋值给指针串


s,


并返回


s


第



3


页



共



11


页



{















int i=0;


linkstring *q,*tc;


s=(linkstring *)malloc(sizeof(linkstring));


s->next=NULL;


tc=s;//tc

< p>
指向


s


串的最后一个结点



while(t[i]!='0')//


实现字符数组顺序赋值 到串


s


{







}


q=(linkstring *)malloc(sizeof(linkstring));


q->data=t[i];


tc->next=q;//< /p>


使得


s


中与


tc


同地址的


next


指向


q,


使


tc


与


q


相连接



tc=q;//tc


直接指向


q


i++;



tc->next=NULL;


}


void strcopy(linkstring *&s,linkstring *t)//


将


t


串赋值给


s


串并返回


s


{
















linkstring *p=t->next,*q,*tc;


s=(linkstring *)malloc(sizeof(linkstring));


s->next=NULL;


tc=s;//tc

< p>
指向


s


串的最后一个结点



while(p!=NULL)//


实现字符数组顺序赋值到串


s


{







}


q=(linkstring *)malloc(sizeof(linkstring));


q->data=p->data;


tc->next=q; //


使得


s


中与


tc


同地址的


next


指向


q,


使


tc


与


q


相连接



tc=q;//tc


直接指向


q


p=p->next;


tc->next=NULL;



}


int strlength(linkstring *s)//


求


s


的长度



{











}


int n=0;


linkstring *p;


p=s->next;


while(p!=NULL)


{



n++;



p=p->next;


}


return n;


第



4


页



共



11


页



void dispstr(linkstring *s)//


输出串


s


{









linkstring *p=s->next;


while(p!=NULL)


{




cout<data;


p=p->next;


}


cout<


}


int strequal(linkstring *s,linkstring *t)//


判断


s


串和


t


串是否相等



{




















linkstring *p,*q;


p=s->next;q=t->next;


while(p!=NULL&&q!=NULL)



{







if(p->data!=q->data)


{



return 0;


}


p=p->next;



q=q->next;


}


if(p!=NULL||q!=NULL)


{



}


return 0;


else



return 1;



}


linkstring *concat(linkstring *s,linkstring *t)//


将


t


串连接到


s


串后



{














linkstring *p,*q,*tc,*r;


r=(linkstring *)malloc(sizeof(linkstring));


r->next=NULL;


tc=r;


p=s->next;


while(p!=NULL)


{







q=(linkstring *)malloc(sizeof(linkstring));


q->data=p->data;


tc->next=q;


tc=q;


p=p->next;


第



5


页



共



11


页


-


-


-


-


-


-


-


-