第八周项目实践2 建立连串算法库
生活随笔
收集整理的這篇文章主要介紹了
第八周项目实践2 建立连串算法库
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
liString.h
#ifndef LISTRING_H_INCLUDED #define LISTRING_H_INCLUDEDtypedef struct snode {char data;struct snode *next; } LiString; void StrAssign(LiString *&s,char cstr[]); //字符串常量cstr賦給串s void StrCopy(LiString *&s,LiString *t); //串t復制給串s bool StrEqual(LiString *s,LiString *t); //判串相等 int StrLength(LiString *s); //求串長 LiString *Concat(LiString *s,LiString *t); //串連接 LiString *SubStr(LiString *s,int i,int j); //求子串 LiString *InsStr(LiString *s,int i,LiString *t) ; //串插入 LiString *DelStr(LiString *s,int i,int j); //串刪去 LiString *RepStr(LiString *s,int i,int j,LiString *t); //串替換 void DispStr(LiString *s); //輸出串#endif // LISTRING_H_INCLUDED liString.cpp #include <stdio.h> #include <malloc.h> #include "liString.h"void StrAssign(LiString *&s,char cstr[]) //字符串常量cstr賦給串s {int i;LiString *r,*p;s=(LiString *)malloc(sizeof(LiString));r=s; //r始終指向尾節點for (i=0;cstr[i]!='\0';i++){ p=(LiString *)malloc(sizeof(LiString));p->data=cstr[i];r->next=p;r=p;}r->next=NULL; } void StrCopy(LiString *&s,LiString *t) //串t復制給串s {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; } bool 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 true;elsereturn false; } 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));str->next=NULL;r=str; //r指向新建鏈表的尾節點if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))return str; //參數不正確時返回空串for (k=0;k<i-1;k++)p=p->next;for (k=1;k<=j;k++) //將s的第i個節點開始的j個節點復制到str{ q=(LiString *)malloc(sizeof(LiString));q->data=p->data;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));str->next=NULL;r=str; //r指向新建鏈表的尾節點if (i<=0 || i>StrLength(s)+1) //參數不正確時返回空串return str;for (k=1;k<i;k++) //將s的前i個節點復制到str{ q=(LiString *)malloc(sizeof(LiString));q->data=p->data;r->next=q;r=q;p=p->next;}while (p1!=NULL) //將t的所有節點復制到str{ q=(LiString *)malloc(sizeof(LiString));q->data=p1->data;r->next=q;r=q;p1=p1->next;}while (p!=NULL) //將*p及其后的節點復制到str{ q=(LiString *)malloc(sizeof(LiString));q->data=p->data;r->next=q;r=q;p=p->next;}r->next=NULL;return str; } LiString *DelStr(LiString *s,int i,int j) //串刪去 {int k;LiString *str,*p=s->next,*q,*r;str=(LiString *)malloc(sizeof(LiString));str->next=NULL;r=str; //r指向新建鏈表的尾節點if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))return str; //參數不正確時返回空串for (k=0;k<i-1;k++) //將s的前i-1個節點復制到str{ q=(LiString *)malloc(sizeof(LiString));q->data=p->data;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;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));str->next=NULL;r=str; //r指向新建鏈表的尾節點if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))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"); }main.cpp #include <stdio.h> #include "liString.h" int main() {LiString *s,*s1,*s2,*s3,*s4;printf("鏈串的基本運算如下:\n");printf(" (1)建立串s和串s1\n");StrAssign(s,"abcdefghijklmn");printf(" (2)輸出串s:");DispStr(s);StrAssign(s1,"123");printf(" (2)輸出串s1:");DispStr(s1);printf(" (3)串s的長度:%d\n",StrLength(s));printf(" (4)在串s的第9個字符位置插入串s1而產生串s2\n");s2=InsStr(s,9,s1);printf(" (5)輸出串s2:");DispStr(s2);printf(" (6)刪除串s第2個字符開始的5個字符而產生串s2\n");s2=DelStr(s,2,3);printf(" (7)輸出串s2:");DispStr(s2);printf(" (8)將串s第2個字符開始的5個字符替換成串s1而產生串s2\n");s2=RepStr(s,2,5,s1);printf(" (9)輸出串s2:");DispStr(s2);printf(" (10)提取串s的第2個字符開始的10個字符而產生串s3\n");s3=SubStr(s,2,10);printf(" (11)輸出串s3:");DispStr(s3);printf(" (12)將串s1和串s2連接起來而產生串s4\n");s4=Concat(s1,s2);printf(" (13)輸出串s4:");DispStr(s4);return 0; }總結
以上是生活随笔為你收集整理的第八周项目实践2 建立连串算法库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第八周项目实践1 建立顺序串的算法库
- 下一篇: 第八周实践项目3 顺序串一些算法操作