当前位置:文档之家› 数据结构串基本操作代码

数据结构串基本操作代码

实验三串//串的基本操作#include "stdio.h"#include "stdlib.h"#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN+1];void strlength(SString S)//求字串并放到 S[0] 中{int m;for(m=1;S[m]!='\0';m++);S[0]=m-1;}void insert(SString S,int n,char a)//是插入的位置 a 是插入的字符{strlength(S);int i;for(i=S[0];i>=n;i--)S[i+1]=S[i];S[n]=a;S[S[0]+2]='\0';}int compare(SString S,SString T){strlength(S);strlength(T);int i;for(i=1;i<=S[0]&&i<=T[0];i++){if(S[i]>T[i])return 1;if(S[i]<T[i])return -1;if(S[i]==T[i])continue;}if(S[0]>T[0])return 1;else if(S[0]<T[0])return -1;elsereturn 0;}void concat(SString T1,SString S1,SString S2){strlength(S1);strlength(S2);int i;if(S1[0]+S2[0]<=MAXSTRLEN)//未截断{for(i=1;i<=S1[0];i++)T1[i]=S1[i];for(i=1;i<=S2[0];i++)T1[S1[0]+i]=S2[i];}T1[S1[0]+S2[0]+1]='\0';}void clear(SString S){strlength(S);int i;for(i=1;i<S[0];i++)S[i]='\0';S[0]=0;}int SubString(SString &Sub,SString S,int pos,int len){int i;strlength(S);if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1){printf("Error!position or length is out of range\n");return 0;}for(i=1;i<=len;i++)Sub[i]=S[pos+i-1];Sub[i]='\0';Sub[0]=len;return 1;}int Index(SString S,SString T,int pos) {int i=pos,j=1;strlength(S);strlength(T);while(i<=S[0]&&j<=T[0]){if(S[i]==T[j]){++i;++j;}else{i=i-j+2;j=1;}}if(j>T[0])return i-T[0];else return 0;}void main()// 测试主程序{/*SString S;printf(" 请输入字符串S: ");scanf("%s",S+1);printf("\n");printf(" 输入的字符串为: ");printf("%s",S+1);printf("\n");insert(S,2,'A');printf(" 插入字符后的字符串为:"); printf("%s",S+1);printf("\n");*//*SString T;printf(" 请输入字符串T: ");scanf("%s",T+1);printf("\n");int flag;flag=compare(S,T);printf("%d",flag);*//*SString S1,S2,T1;printf(" 请输入字符串S1:");scanf("%s",S1+1);printf(" 请输入字符串S2:");scanf("%s",S2+1);concat(T1,S1,S2);printf(" 连接的新字符串为: ");printf("%s",T1+1);printf("\n");*//*SString S;printf(" 请输入字符串S: ");scanf("%s",S+1);printf(" 你输入的字符串为: %s\n",S+1); clear(S);printf("%s\n",S+1);*//*SString S,Sub;int pos,len;printf(" 请输入字符串S: ");scanf("%s",S+1);printf(" 请输入子串的位置: ");scanf("%d",&pos);printf(" 请输入子串的长度: ");scanf("%d",&len);if(SubString(Sub,S,pos,len)){printf("\n 子串为: %s\n",Sub+1);printf(" 子串的长度: %d\n",Sub[0]);}*/SString S,T;int pos,r;printf(" 输入主串: ");scanf("%s",S+1);printf(" 输入模式串: ");scanf("%s",T+1);printf(" 请输入起始位置pos:");scanf("%d",&pos);if(r=Index(S,T,pos))printf(" 模式串在主串中的位置为:%d\n",r);else printf("匹配失败! \n");}//字符串中字符频度#include "Stdio.h"#include "stdlib.h"#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN+1]; typedef struct charcp{char zifu;int pingdu;struct charcp *next;}charcp,*Linkchar;void Strlength(SString S){int i;for(i=1;S[i]!='\0';i++);S[0]=i-1;}void Init(Linkchar &cp){cp=(Linkchar)malloc(sizeof(charcp));cp->next=NULL;cp->zifu='\0';cp->pingdu=0;}void Pingdu(SString S,Linkchar &cp){int i=1;charcp *p;charcp *q;while(S[i]!='\0'){p=cp;if(p->zifu=='\0'){p->zifu=S[i];p->pingdu++;i++;continue;}while(p->next!=NULL){if(p->zifu==S[i]){p->pingdu++;break;}p=p->next;}if(p->next==NULL){if(p->zifu==S[i]){p->pingdu++;}else{q=(Linkchar)malloc(sizeof(charcp));q->zifu=S[i];q->pingdu=1;q->next=NULL;p->next=q;}}i++;}}void main(){Linkchar cp;Init(cp);SString S;printf(" 请输入字符串S: ");scanf("%s",S+1);Pingdu(S,cp);charcp *p=cp;while(p!=NULL){printf(" 字符 %c 的频度为 %d \n",p->zifu,p->pingdu);p=p->next;}}。

相关主题