串的基本操作
Posted xiaoqiz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串的基本操作相关的知识,希望对你有一定的参考价值。
include<stdio.h> #include<stdlib.h> typedef struct{ char *ch; int length; }string; void strinsert(string &s,int pos,string t){ if(pos<1||pos>s.length+1) exit(0); if(t.length){ if(!(s.ch=(char*)realloc(s.ch,(s.length+t.length)*sizeof(char)))) exit(0); int i; for(i=s.length-1;i>pos-1;i--) { s.ch[i+t.length]=s.ch[i]; } for(i=0;i<t.length;i++){ s.ch[pos-1+i]=t.ch[i]; } s.length+=t.length; } } void strassign(string &t,char *chars){ if(t.ch) free(t.ch); int i; char *c; for(i=0,c=chars;*c;i++,c++); if(!i) {t.ch=NULL; t.length=0;} else { if(!(t.ch=(char*)malloc(i*sizeof(char)))) exit(0); for(int j=0;j<i;j++){ t.ch[j]=c[j]; } t.length=i; } } int strcompare(string s,string t){ int i; for(i=0;i<s.length&&i<t.length;i++){ if(s.ch[i]!=t.ch[i]) return s.ch[i]-t.ch[i]; } return s.length-t.length; } void clearstring(string &s){ if(s.ch) {free(s.ch); s.ch=NULL; } s.length = 0; } void concat(string &a,string b,string c){ if(a.ch) free(a.ch); if(!(a.ch=(char*)malloc((b.length+c.length)*sizeof(char)))) exit(0); for(int i=0;i<b.length;i++){ a.ch[i]=b.ch[i]; } a.length=b.length+c.length; for(int i=0;i<c.length;i++){ a.ch[i+b.length]=c.ch[i]; } } int index(string s,string t,int pos){// 求子串位置的定位函数 //返回子串t在主串s中的第pos个字符之后的位置 int i=pos,j=1; char *a=s.ch,*b=t.ch; while(i<s.length&&i<=t.length){ if(*a==*b) {i++; j++;} else {i=i-j+2; j=1;} } if(j>t.length) return i-t.length; else return 0; } main(){ string a,b,c; char m[100],n[100]; gets(m); gets(n); strassign(b,m); strassign(c,n); printf("b的长度为%d\n",b.length); printf("c的长度为%d\n",c.length); printf("b和c的比值为%d\n",strcompare(b,c)); concat(a,b,c); puts(a.ch); system("pause"); }
以上是关于串的基本操作的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程