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


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

最新搜索

 

数据结构实验指导书 - 数据结构 实验指导书 院别 专业 班级 姓名 计算机学院编 实验一 线性表的顺序存储实验 一、实验目的及要求 1、掌握在TC环境下调试顺序表...

数据结构与算法实验指导书90969 - 数据结构与算法实验指导书 计算机与信息学院 实验一 【实验目的】 顺序表 熟练掌握线性表在顺序存储结构上的基本操作。 【实验...

数据结构实验指导书02 很好!很好!隐藏>> 实验二 2.1 实验目的: 线性表 (1)掌握线性表的顺序存储结构的定义及 C 语言实现。 (2)掌握线性表在顺序存储结构即...

数据结构实验说明书新版 - the principl e of simplified E IA of constr uction pr oject s in the regi on. In te...

数据结构实验指导书 - 数据结构实验指导(C语言版)... 数据结构实验指导书_IT/计算机_专业资料。数据结构实验指导(C语言版) 数据结构实验指导书 江西农业大学计算机与...

数据结构试验指导书V2[1].0 - V 2.0 数据结构与算法 实验指导书 编写: 编写:陆绍飞 校核: 校核:___ 湖南大学软件学院 2011 年 9 月 湖南大学软件学...

数据结构实验指导书(2012.9) - 1.2 实验报告(文档)书写规范 实验报告(文档)应包括以下 7 个方面的内容: 1、问题分析 根据对实验任务的理解, 以无歧义的陈述...

09级《数据结构》实验指导书 - 《数据结构实验指导书》 潘向辉/吴学毅编写 印包学院数字媒体技术专业 2011 年 3 月 实验说明 实验说明 【实验环境】 操作系统:...

空间数据结构基础实验指导书 隐藏>> 《空间数据结构基础》 课程实习指导书实习周数:2 周 学分数:2 一、实习目的 数据结构是一门重要的专业基础课,其特点是理论...

《数据结构(C 语言版) 》实验指导书(非计算机专业适用) 广州大学 2013.1 目 录 实验一 线性表的顺序存储及其操作... 1 实验二 线性表的链式存储及其操作......


 

热点推荐