当前位置:文档之家› 字符串的相关操作(数据结构课程设计C语言版)

字符串的相关操作(数据结构课程设计C语言版)

课程设计报告课程设计题目:字符串的相关操作学生姓名专业班级指导教师2012年6月24日一、题目及要求○1课程设计目的:课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

○2题目:字符串的相关操作1)建立两个字符串string1和string22)编程实现字符串的连接、比较、查询string2在string1的位置、求子串、求串长二、模块图三、程序清单#include<stdio.h>#include<string.h>#include<stdlib.h>#define maxlen 40typedef struct{char ch[maxlen+1];int len;}sstring;void strini(sstring *s){s->len=0;}char *strcreate(sstring *s,int len){if(len<=0||len>maxlen)printf("the len is illegal!\n");else{printf("please input the data of the sstirng:\n");s->len=len;scanf("%s",s->ch);}return s->ch;}void strdisplay(sstring *s){if(s->len<=0)printf("the sstring is empty!\n");else{printf("output the data of the sstring:\n");s->ch[s->len]='\0';printf("%s",s->ch);}printf("\n");}int strcompare(sstring s, sstring t){int i;for (i=0;i<s.len&&i<t.len;i++)if (s.ch[i]!=t.ch[i])return(s.ch[i] - t.ch[i]);return(s.len - t.len);}int strlength(sstring s){return(s.len);}int strlink(sstring *s,sstring t1,sstring t2){int i,j, flag;for(j=0;j<t1.len;j++)s->ch[j]=t1.ch[j];s->len=t1.len;if (t1.len + t2.len<=maxlen){for (i=t1.len; i<t1.len + t2.len; i++) s->ch[i]=t2.ch[i-s->len];s->len+=t2.len;s->ch[s->len]='\0';flag=1;}elseif (t1.len<maxlen){for (i=t1.len;i<maxlen;i++)s->ch[i]=t2.ch[i-s->len];s->len=maxlen;s->ch[s->len]='\0';flag=0;}elseflag=0;return(flag);}int strindex(sstring s,int pos, sstring t) {int i, j, start;if (t.len==0)return(0);start=pos;i=start;j=0;while (i<s.len && j<t.len)if (s.ch[i]==t.ch[j]){i++;j++;}else{start++;i=start;j=0;}if (j>=t.len)return(start);elsereturn(-1);}int substring(sstring *sub, sstring s, int pos, int len) {int i;if (pos<0 || pos>s.len || len<1 || len>s.len-pos) {sub->len=0;return(0);}else{for (i=0; i<len; i++)sub->ch[i]=s.ch[i+pos];sub->len=len;sub->ch[sub->len]='\0';return(1);}}void menu(){int flag=1,m=0,n,i,len,pos;sstring s[4];while(flag){printf("/*-----------*/\n");printf("1,create\n");printf("2,display\n");printf("3,length\n");printf("4,compare\n");printf("5,link\n");printf("6,index\n");printf("7,substring\n");printf("0,exit\n");printf("/*-----------*/\n");printf("please choose:\n");scanf("%d",&n);switch(n){case 1:{printf("create s%d\n",m+1);printf("please input the length of the s%d:\n",m+1);scanf("%d",&len) ;strini(&s[m]);strcpy(s[m].ch,strcreate(&s[m],len));m++;}break;case 2:{printf("which string to display:\n");scanf("%d",&i);printf("display s%d\n",i);strdisplay(&s[i-1]);}break;case 3:{printf("which string to show length:\n");scanf("%d",&i);printf("the string%d 's length is:%3d\n",i,strlength(s[i-1]));}break;case 4:{printf("compare s1 to s2\n");if(strcompare(s[0],s[1])>0)printf("s1>s2\n");else if(strcompare(s[0],s[1])==0)printf("s1=s2\n");else printf("s1<s2\n");}break;case 5:{printf("link s1 to s2\n");strlink(&s[2],s[0],s[1]);}break;case 6:{printf("please input pos:\n");scanf("%d",&pos);printf("the position is in:%3d\n",strindex(s[2],pos,s[1]));}break;case 7:{printf("please input pos:\n");scanf("%d",&pos);printf("please input len:\n");scanf("%d",&len);strini(&s[3]);substring(&s[3],s[0],pos,len);strdisplay(&s[3]);}break;case 0:exit(0);default:printf("the choice is illegal! try again!\n");}}}main(){menu();}四、运行结果该菜单用的是下标标注法,即0-5表示1-6这6个位置,截图前有操作的解释(1)初始菜单:(2)创建:创建字符串s1和s2(3)显示:这里显示s1和s2连接后的串,所以这步运行应在连接操作之后,也可以单独显示s1和s2(4)串长:同上,连接操作之后运行,求的是s1和s2连接后的串长(5)比较串:(6)串连接:这里只执行连接操作,无显示,显示见操作【2】display(7)定位串:上面已经解释是下标标注法,这里的2和5位置都是从0开始计位置的,这里求的字串是s2在新生成的(合并s1和s2后的串)串里的位置(8)求子串:同上,下标标注法四、小结(收获和体会)。

相关主题