首页 考试资料幻灯片工程技术公务员考试小学教学中学教学大学教学外语资料
数据结构实验书


第三节 字符串操作演示系统
【问题描述】 用户自己实现串类型,并写一个串的基本操作的演示系统。在该演示系统中能提供命令行的输入,并能对 输入的命令行进行简单的编译并作相应的出错处理,最后根据命令动词功能来执行命令行。命令定义如 下: 1.赋值:assign 例如输入命令 串名 1 assign 串名 2 ss tt

操作的结果是将串 tt 赋值给了 ss 串

2.新建:creat 例如输入命令

串名 creat

字符串常量 ss 'abcdefg '

操作的结果是将字符串常量赋值给串 ss,注意:字符串常量两边用单引号括起来,不能省略。 3.判等: equal 例如输入命令 串名 1 equal 串名 2 ss tt

操作的结果是根据两串比较的结果输出相应的信息 4.求串长:length 串名

操作的结果是返回字符串长度 5.字符串连接: concat 例如输入命令 concat 串名 1 ss 串名 2 tt 新串名 v

操作的结果是将串 ss 和串 tt 连接起来(ss 在前,tt 在后)形成一个新串,并输出新串 6.求子串: substr 例如输入命令 串名 起始位置 ss 1 子串长度 3 新子串名 t 个字符存入到串 t 中 起始位置

substr

操作的结果是将串 ss 从起始位置 1 开始的 3 7.子串定位: 例如输入命令 index index 串名 1 ss t 串名 2 1

操作的结果是返回串 t 在串 ss 从第 1 个字符后的字符序列中第一次出现的位置 8.退出: quit 功能:结束演示系统运行 【数据描述】 1.定义串的数据类型为指向字符的指针 typedef char *STRING;/*定义新的字符串类型,即指向字符的指针*/

2.在本程序中支持串名操作,因此需将各字符串所对应的串名和首地址都存放在一个串头表中 struct strheadlist /*字符串首

{STRING strhead[100]; 地址*/ STRING 的串名*/ int curnum; /*当前串头表中串的数目*/ strname[100];

/*字符串

} 3.对于提示符下输入的每一行命令,在进行分析以后,需要保留分析的结果(参数最多有 6 个) struct result {int num; 词)*/ int nametype[6]; STRING */ } 注:参数类型以整型表示,如为 1,则表示参数为命令动词; 如为 2,则表示参数为字符串 如为 3,则表示参数为整数 如为 4,则表示参数为串名 可以仿照 DOS 操作系统来进行设计,提供命令行提示符,并能输入相应命令,并将命令行拆分为不同的几 个部分(类似统计单词个数),再根据编译的结果进行相应的处理。 【C 源程序】 #include #include "stdlib.h" "stdio.h" /*定义新的字符串类型,即指向字符的指针*/ str[6]; /*命令行中各参数的类型*/ /*命令行中各参数都以字符串的形式返回 /*命令行中参数的个数(含命令动

typedef char *STRING; struct strheadlist

{STRING strhead[100]; STRING strname[100];

int curnum; }; /*定义指向字符串的字针数组,并存放各字符串的串名(串名也用字符串来表示),及当前堆中

串的数目*/ struct {int result num;

int nametype[6]; STRING }; str[6]; /*定义命令行编译以后形成的命令及参数等数据*/

int strtoint(STRING void void creat(STRING assign(STRING

s); s,STRING ss); s,STRING t); t);

int equal(STRING int length(STRING void void concat(STRING substr(STRING

s,STRING s); s,STRING

t,STRING

v); len,STRING v);

s,int start,int s,STRING

int index(STRING struct result

t,int start); row);

cmdsyna(int s); head;

int lookup(STRING struct char main() { struct result strheadlist cmd[40][80];

comm;

int row=0,i; char c;

int equ; head.curnum=0; while(1) { printf("CMD>"); for (i=0;(c=getchar())!='n ';i++) cmd[row][i]= '\0 '; cmd[row][i]=c; /*重复输入并处理相应命令*/

comm=cmdsyna(row);/*对各命令动词进行判数并作参数分析*/ if (strcmp(comm.str[0],"creat")==0) {if (comm.num!=2) else reat!n"); else {if (comm.nametype[1]==4 && comm.nametype[2]==2) if /*字符串创建*/ is wrong!n"); %s cannot be c

printf("Parameters

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

printf("String

creat(comm.str[1],comm.str[2]); } } else if (strcmp(comm.str[0],"assign")==0) {if (comm.num!=2) else } else if (strcmp(comm.str[0],"equal")==0) printf("Parameters /*字符串判等*/ is wrong!n"); /*字符串赋值*/ is wrong!n");

printf("Parameters

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

{if (comm.num!=2) else

{if (lookup(comm.str[1])==-1||lookup(comm.str[2])==-1) printf("String r[1],comm. str[2]); else {if .str[1])], head.strhead[lookup(comm.str[2])])==1) tf("Equal!!!n"); else printf("Not equal!!!n"); prin (equal(head.strhead[lookup(comm %s or %s is not found!n",comm.st

} } } else if (strcmp(comm.str[0],"length")==0) {if (comm.num!=1) else /*字符串求长*/ is wrong!n");

printf("Parameters

{if (lookup(comm.str[1])==-1) printf("The string %s connot be found

!n"); else s %dn",comm.str[1], [lookup(comm.str[1])],length(head.strhead[lookup(comm.str[1])])); printf("String %s :%s length i

head.strhead

} } else 字符串*/ {if (comm.num!=3) "); else { .str[2])==-1) printf("The string %s or not found!n", comm.str[1],comm.str[2]); else rintf("String %s connot be creat!n", comm.str[3]); else ncat(head.strhead[lookup(comm.str[1])], co if (lookup(comm.str[3])!=-1) p %s is if (lookup(comm.str[1])==-1||lookup(comm printf("Parameters is wrong!n if (strcmp(comm.str[0],"concat")==0) /*字符串连接并形成新的

head.strhead[lookup(comm.str[2])],comm.str[3]); } } else */ {if (comm.num!=4) else {if (lookup(comm.str[1])==-1) printf("String m.str[1]); else {if (lookup(comm.str[4])!=-1) printf("String %s connot be creat!n",comm.str[4]); else %s is not found!n",com printf("Parameters wrong!n"); if (strcmp(comm.str[0],"substr")==0) /*取字符串子串, 并形成新的字符串

123456789101112131415161718192021222324252627282930

 


 

  【Top

最新搜索

 


 

热点推荐