赞
踩
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
-
- typedef struct snode
- {
- char data;
- struct snode * next;
- }LiString;
-
- void StrAssign(LiString *&s,char t[])
- {
- int i;
- LiString *r,*p; /*r始终指向尾结点*/
- s=(LiString *)malloc(sizeof(LiString));
- r=s;
- for (i=0;t[i]!='\0';i++)
- {
- p=(LiString *)malloc(sizeof(LiString));
- p->data=t[i];
- r->next=p;
- r=p;
- }
- r->next=NULL;
- }
-
- void StrCopy(LiString *&s,LiString *t)
- {
- LiString *p=t->next,*q,*r;
- s=(LiString *)malloc(sizeof(LiString));
- r=s; /*r始终指向尾结点*/
- while (p!=NULL) /*将t的所有结点复制到s*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;
- r->next=q;
- r=q;
- p=p->next;
- }
- r->next=NULL;
- }
-
- int StrEqual(LiString *s,LiString *t)
- {
- LiString *p=s->next,*q=t->next;
- while (p!=NULL && q!=NULL && p->data==q->data)
- {
- p=p->next;
- q=q->next;
- }
- if (p==NULL && q==NULL)
- return 1;
- else
- return 0;
- }
-
- int StrLength(LiString *s)
- {
- int i=0;
- LiString *p=s->next;
- while (p!=NULL)
- {
- i++;
- p=p->next;
- }
- return i;
- }
-
- LiString *Concat(LiString *s,LiString *t)
- {
- LiString *str,*p=s->next,*q,*r;
- str=(LiString *)malloc(sizeof(LiString));
- r=str;
- while (p!=NULL) /*将s的所有结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;
- r->next=q;
- r=q;
- p=p->next;
- }
- p=t->next;
- while (p!=NULL) /*将t的所有结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;
- r->next=q;
- r=q;
- p=p->next;
- }
- r->next=NULL;
- return str;
- }
-
- LiString *SubStr(LiString *s,int i,int j)
- {
- int k;
- LiString *str,*p=s->next,*q,*r;
- str=(LiString *)malloc(sizeof(LiString));
- r=str;
- if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))
- {
- printf("参数不正确\n");
- return str; /*参数不正确时返回空串*/
- }
- for (k=0;k<i-1;k++) /*找第i-1个结点,由p指向它*/
- p=p->next;
- for (k=1;k<=j;k++) /*s[i]开始的j个结点=>str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;q->next=NULL;
- r->next=q;r=q;
- p=p->next;
- }
- r->next=NULL;
- return str;
- }
-
- LiString *InsStr(LiString *s,int i,LiString *t)
- {
- int k;
- LiString *str,*p=s->next,*p1=t->next,*q,*r;
- str=(LiString *)malloc(sizeof(LiString));
- r=str;
- if (i<=0 || i>StrLength(s)+1)
- {
- printf("参数不正确\n");
- return str; /*参数不正确时返回空串*/
- }
- for (k=1;k<i;k++) /*将s的前i个结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;q->next=NULL;
- r->next=q;
- r=q;
- p=p->next;
- }
- while (p1!=NULL) /*将t的所有结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p1->data;q->next=NULL;
- r->next=q;r=q; p1=p1->next;
- }
- while (p!=NULL) /*将*p及其后的结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;q->next=NULL;
- r->next=q;r=q; p=p->next;
- }
- r->next=NULL; //q用来申请结点,p遍历s1,q遍历s2
- return str;
- }
-
- LiString *DelStr(LiString *s,int i,int j)
- {
- int k;
- LiString *str,*p=s->next,*q,*r;
- str=(LiString *)malloc(sizeof(LiString));
- r=str;
- if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))
- {
- printf("参数不正确\n");
- return str; /*参数不正确时返回空串*/
- }
- for (k=0;k<i-1;k++) /*将s的前i-1个结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;q->next=NULL;
- r->next=q;
- r=q;
- p=p->next;
- }
- for (k=0;k<j;k++) /*让p沿next跳j个结点*/
- p=p->next;
- while (p!=NULL) /*将*p及其后的结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;q->next=NULL;
- r->next=q;
- r=q;
- p=p->next;
- }
- r->next=NULL;
- return str;
- }
-
- LiString *RepStr(LiString *s,int i,int j,LiString *t)
- {
- int k;
- LiString *str,*p=s->next,*p1=t->next,*q,*r;
- str=(LiString *)malloc(sizeof(LiString));
- r=str;
- if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))
- {
- printf("参数不正确\n");
- return str; /*参数不正确时返回空串*/
- }
- for (k=0;k<i-1;k++) /*将s的前i-1个结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;
- q->next=NULL;
- r->next=q;
- r=q;
- p=p->next;
- }
- for (k=0;k<j;k++) /*让p沿next跳j个结点*/
- p=p->next;
- while (p1!=NULL) /*将t的所有结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p1->data;q->next=NULL;
- r->next=q;r=q;p1=p1->next;
- }
- while (p!=NULL) /*将*p及其后的结点复制到str*/
- {
- q=(LiString *)malloc(sizeof(LiString));
- q->data=p->data;
- q->next=NULL;
- r->next=q;
- r=q;
- p=p->next;
- }
- r->next=NULL;
- return str;
- }
-
- void DispStr(LiString *s)
- {
- LiString *p=s->next;
- while (p!=NULL)
- {
- printf("%c",p->data);
- p=p->next;
- }
- printf("\n");
- }
-
- int main()
- {
- LiString *s,*s1,*s2,*s3,*s4;
- printf("建立串S和S1...\n");
- StrAssign(s,"abcdefghijklmn");
- StrAssign(s1,"xyz");
- Sleep(2000);
-
- printf("输出串S:");
- DispStr(s);
- Sleep(2000);
-
- int length = StrLength(s);
- printf("输出串S的长度:%d",length);
- printf("\n");
- Sleep(2000);
-
- s2 = InsStr(s,9,s1);
- printf("在串S的第9个字符位置插入串S1而生成串S2...\n");
- Sleep(2000);
-
- printf("输出串S2:");
- DispStr(s2);
- Sleep(2000);
-
- s2 = DelStr(s,2,5);
- printf("删除串S的第2个字符开始的5个字符而生成串S2...\n");
- Sleep(2000);
-
- printf("输出串S2:");
- DispStr(s2);
- Sleep(2000);
-
- s2 = RepStr(s,2,5,s1);
- printf("将串S的第2个字符开始的5个字符替换成串S1而生成串S2...\n");
- Sleep(2000);
-
- printf("输出串S2:");
- DispStr(s2);
- Sleep(2000);
-
- s3 = SubStr(s,2,10);
- printf("提取串S的第2个字符开始的10个字符而生成串S3...\n");
- Sleep(2000);
-
- printf("输出串S3:");
- DispStr(s3);
- Sleep(2000);
-
- s4 = Concat(s1,s2);
- printf("将串S1和S2连接起来生成串S4...\n");
- Sleep(2000);
-
- printf("输出串S4:");
- DispStr(s4);
- Sleep(2000);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。