顺序串的操作实现
来源:互联网 发布:服务器的80端口是什么 编辑:程序博客网 时间:2024/06/07 02:07
/*整型数据最好不要用 引用传参*/#include<stdio.h>#include<stdlib.h>#define MaxSize 100typedef struct{ char data[MaxSize]; int length;} SqString;//初始化串void InitString(SqString* &s){ s=(SqString*)malloc(sizeof(SqString)); s->length=0;}//生成一个与str串相等的s串void StrAssign(SqString* &s,char str[]){ int i; for(i=0; str[i]!='\0'; i++) { s->data[i]=str[i]; } s->data[i]='\0'; s->length=i;//不包括字符串最后一个空字符}//将串t复制给串svoid StrCopy(SqString* &s,SqString* &t){ int i; for(i=0; i<t->length; i++) { s->data[i]=t->data[i]; } s->data[i]='\0'; s->length=t->length;}//判断两个串是否相等bool StrEqual(SqString* &s,SqString* &t){ int i=0; if(s->length!=t->length) return false; else { for(i=0; i<s->length; i++) { if(s->data[i]!=t->data[i]) { return false; break; } } return true; }}//返回串中的字符数int StrLength(SqString* &s){ return s->length;}//将串s和串t连接在一起SqString* Concat(SqString* &s,SqString* &t){ int i,j=0; SqString *p; InitString(p); for(i=0; i<s->length; i++) { p->data[i]=s->data[i]; } for(i=s->length; i<s->length+t->length; i++,j++) { p->data[i]=t->data[j]; } p->data[s->length+t->length]='\0'; p->length=s->length+t->length; return p;}//求子串:返回串s中从第i个字符开始的,由连续j个字符组成的子串SqString* SubStr(SqString* &s,int i,int j){ int k=0; SqString *q; InitString(q); if(i<=0||i>s->length||j<0||i+j-1>s->length) return q; for(k=i-1; k<i+j-1; k++) { q->data[k-i+1]=s->data[k]; } q->length=j; q->data[j]='\0'; return q;}//将串t插入到串s中第i个位置,并返回新的串SqString* InsStr(SqString* &s,int i,SqString* &t){ int j=0; SqString *q; InitString(q); if(i<=0||i>s->length+1) return q; for(j=0; j<i-1; j++) { q->data[j]=s->data[j]; } for(j=0; j<t->length; j++) { q->data[i+j-1]=t->data[j]; } for(j=i-1; j<s->length; j++) { q->data[t->length+j]=s->data[j]; } q->length=s->length+t->length; q->data[q->length]='\0'; return q;}//从串s中删去第i个字符开始的长度为j的子串,并返回产生的新串SqString* DelStr(SqString* &s,int i,int j){ int k; SqString *q; InitString(q); if(i<=0||i>s->length||i+j>s->length+1) return q; for(k=0;k<i-1;k++) { q->data[k]=s->data[k]; } for(k=i+j-1;k<s->length;k++) { q->data[k-j]=s->data[k]; } q->length=s->length-j; q->data[q->length]='\0'; return q;}//在串s中,将第i个字符开始的j个字符构成的子串用串t替换,并返回产生的新串SqString* RepStr(SqString* &s,int i,int j,SqString* &t){ int k; SqString *q; InitString(q); if(i<=0||i>s->length||i+j-1>s->length) return q; for(k=0;k<i-1;k++) { q->data[k]=s->data[k]; } for(k=0;k<t->length;k++) { q->data[i+k-1]=t->data[k]; } for(k=i+j-1;k<s->length;k++) { q->data[t->length+k-j]=s->data[k]; } q->length=s->length-j+t->length; q->data[q->length]='\0'; return q;}//输出串void PrintStr(SqString* &s){ int i=0; while(s->data[i]!='\0') { printf("%c",s->data[i]); i++; } printf("\n"); printf("%d\n",s->length);}int main(){ char a[20]= {"I Love China"}; char b[20]= {"Fuck thing!"}; SqString *p; SqString *q; SqString *m,*n; InitString(p); InitString(q); StrAssign(p,a); StrAssign(q,b); m=InsStr(p,5,q); n=DelStr(m,5,4); PrintStr(n); return 0;}
0 0
- 顺序串的操作实现
- 顺序栈的操作实现
- 顺序栈的操作实现
- 使用c#实现顺序表的操作
- 顺序栈的基本操作实现
- 顺序栈的基本操作实现
- 集合的顺序存储及操作实现
- 顺序栈的实现和操作
- 顺序栈的基本操作实现
- 顺序栈的实现和操作
- 顺序表堆栈的操作实现源码
- 顺序表中基本操作的实现
- 1044 顺序栈基本操作的实现
- 顺序栈10种操作的实现
- 实现数据结构顺序表的基本操作
- 顺序栈的操作实现_C语言
- 编程实现顺序表的基本操作
- 顺序表插入操作的实现(0943)
- OpenCV与相机的关系
- 【转】Java 线程池的原理与实现
- Android向服务器发送Json格式请求——转载许晓北博客
- The Solution to Leetcode 55 Jump Game
- rman备份(教程与案例)
- 顺序串的操作实现
- Asterisk运行中报“ Unable to find a codec translation path from (g729) to (slin”错误解决办法
- list set 求交集、差集、并集
- maven依赖关系中Scope的作用
- 通过反编译深入理解Java String及intern
- PHP——AJAX 与 PHP
- Quake4之Fx
- android studio 修改应用版本号
- MFC之窗口控件更新重绘相关函数