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


{int

start,len;

start=strtoint(comm.str[2]); len=strtoint(comm.str[3] ); ,start, len,comm.str[4]); } } } } else if (strcmp(comm.str[0],"index")==0) {if (comm.num!=3) else {if (lookup(comm.str[1])==-1||lookup(comm .str[2])==-1) printf("String %s or %s is not found!n", /*字符串定位*/ wrong!n"); substr(head.strhead[lookup(comm.str[1])]

printf("Parameters

comm.str[1],comm.str[2]); else {int start,flag=-1;

start=strtoint(comm.str[3]); flag=index(head.strhead[lookup(c omm.str[1])],head.strhead[lookup(comm.str[2])],start); if start %d , String else %s is not index!!!n",comm.str[1],start,comm.str[2]); %s start %d ,String %s is index %d!!!n", (flag==-1) printf("String %s

printf("String

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

else

if

(strcmp(comm.str[0],"quit")==0) {printf("Bye break; } Bye!n");

/*退出演示系统*/

else printf("Bad 令动词提示*/ row++; } } int strtoint(STRING { int i=0; int total=0; while(s[i]!= '\0 ') s) /*将字符串转换成整数常量*/ filename or no command!n"); /*错误命

{total=total*10+s[i]-48; i++; } return(total); } int lookup(STRING s)

/*查找串表中是否存在串名所对应的字符串,如存在则返回所对应的位置,否则返回-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 {int result i; result c; res; cmdsyna(int row) /*对输入的命令行进行编译*/

struct char

int word=0,start; res.num=-1; for(i=0;(c=cmd[row][i])!= { if(c== ' ') '\0 ';i++)

{word=0; cmd[row][i]= '\0 } else if (word==0) /*出现了一个新的参数,将分离出的各参数以及命令动词放置于参数表中*/ {res.num++; start=i;word=1; res.str[res.num]=&cmd[row][start]; if else if (cmd[row][start]==39) '\0 '; (res.num==0) res.nametype[res.num]=1; ';

{cmd[row][start]=

res.str[res.num]=&cmd[row][start+1]; res.nametype[res.num]=2; } else {if = '9 ') res.nametype[res.num]=3; (cmd[row][start]>= '0 '&&cmd[row][start]<

else } } else {if ';

res.nametype[res.num]=4;

(res.nametype[res.num]==2

&&

c==39)

cmd[row][i]=

'\0

/*处理参数中字符串常量*/ if [i]= '\0'; /*处理参数中整数常量*/ } } return(res); } int index(STRING s,STRING t,int start) (res.nametype[res.num]==3 &&(c<'0'||c>'9')) cmd[row]

/*从串 S 起始置 START 开始查找串 T,如找到,则返回第一次出现的位置,否则返回-1*/ { int i,j; if ((start<0)||(start+length(t)>length(s))||(length(t)==0)) return(-1); else {i=start; j=0; while { if (s[i]==t[j]) {i++;j++;} else {i=i-j+1;j=0;} } (i<length(s)&&j<length(t))

} if (j==length(t)) return(i-length(t)); else return(-1); } void substr(STRING s,int start,int len,STRING v)

/*为新串开辟新的空间,并将从串 S 中 START 起始位置起取 LEN 长度的子串存放起来,把新串的串 名和首地址存放于串表中*/ {int char if i; ch[80]; (start<0&&start>=length(s)) printf("Cannot 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]; ch[i]= head.curnum++; printf("The } else printf("Cannot } } void concat(STRING s,STRING t,STRING v) be substr!!!n"); string %s :%sn",v,ch); '\0'; be substr!!!n");

/*为新串开辟新的空间,并将两串连接起来存放起来,并输出连接后的字符串,将新串的串名和首地 址存放到串表中*/

{ int i,j; char ch[80];

head.strname[head.curnum]=v; head.strhead[head.curnum]=ch; for (i=0;s[i]!= '\0';i++)

ch[i]=s[i]; for (j=i,i=0;t[i]!= ch[j]=t[i]; ch[j]= '\0'; '\0';i++,j++)

head.curnum++; printf("The string %s } int length(STRING { return(strlen(s)); } int equal(STRING s,STRING t) s) :%sn",v,ch);

/*比较两串是否相等,如相等则返加整数 1,否则返回 0*/ { if else } void assign(STRING s,STRING t) (strcmp(s,t)==0) return 0; return 1;

/*将字符串 T 所指向的字符串的首地址和新串 S 的名称存入于串表相应的位置上,并输出赋值后的字 符串*/ { int look1,look2; if ((look1=lookup(t))==-1) printf("The string %s is not found!n",t);

else

{if ((look2=lookup(s))==-1) {head.strhead[head.curnum]=head.strhead[look1]; head.strname[head.curnum]=s; head.curnum++; } else {head.strhead[look2]=head.strhead[look1];} printf("The string %s } : %sn",s,head.strhead[look2]);}

void

creat(STRING

s,STRING ss)

/*将字符串常量的首地址和串的名称存放于串表相应的位置上,并输出新建后的字符串*/ { head.strhead[head.curnum]=ss; head.strname[head.curnum]=s; head.curnum++; printf("The string %s } 【测试数据】可以自定义一些测试数据,如: 1. CMD>creat 2. CMD>assign 3. CMD>length 4. CMD>concat 5. CMD>index 6. CMD>quit↙ 【说明】 1. 由于 C 语言数组下标是以 0 开始,所以在本程序中使所用到的数组都是以下标 0 开始; 2. 本程序在存放字符串时采用类似堆的存储结构,先定义了一个二维数组来读取每一行命令,在对每一行 命令进行分析以后,将各参数以字符串的形式返回,先进行第一个参数(命令动词)的比较处理,再进行其 作参数的处理,最后执行相应的串操作。 【实验题】 ss tt ss↙ abc ss 'abc' tt tt↙ 0↙ 'abcdef' ss↙ ↙ :%sn",s,ss);

123456789101112131415161718192021222324252627282930

 


 

  【Top

最新搜索

 


 

热点推荐