顺序串数据结构如下:
typedef struct{ ElemType data[MaxSize]; int length; }SqString;
实现以下函数:
void StrAssign(SqString* &s,char str[]);//给一个顺序串赋值初始化 void StrCopy(SqString* &s,SqString* t); //字符串拷贝 int StrEqual(SqString* s,SqString* t); //两个字符串是否相等 int StrLength(SqString* s); //字符串相等 void Concat(SqString* &s,SqString* t); //字符串连接 SqString SubStr(SqString* s,int i,int j); //求子字符串 SqString InsStr(SqString s1,int i,SqString s2); //插入字符串 SqString DelStr(SqString s,int i,int j); //删除字符串 SqString RepStr(SqString s,int i,int j,SqString t); //替换字符串 void DispStr(SqString *s); //输出字符串
#include <stdio.h> #include <stdlib.h> #include <iostream> #define MaxSize 10000 #define ElemType char #define GET_ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0])) using namespace std; typedef struct{ ElemType data[MaxSize]; int length; }SqString; void StrAssign(SqString* &s,char str[]);//给一个顺序串赋值初始化 void StrCopy(SqString* &s,SqString* t); //字符串拷贝 int StrEqual(SqString* s,SqString* t); //两个字符串是否相等 int StrLength(SqString* s); //字符串相等 void Concat(SqString* &s,SqString* t); //字符串连接 SqString SubStr(SqString* s,int i,int j); //求子字符串 SqString InsStr(SqString s1,int i,SqString s2); //插入字符串 SqString DelStr(SqString s,int i,int j); //删除字符串 SqString RepStr(SqString s,int i,int j,SqString t); //替换字符串 void DispStr(SqString *s); //输出字符串 void StrAssign(SqString &s,char str[]){ int i=0; while(str[i]!='\0'){ s.data[i]=str[i]; i++; } s.length=i; } void StrCopy(SqString &s,SqString t){ int i=0; while(t.data[i]!='\0'){ s.data[i]=t.data[i]; i++; } s.length=t.length; } int StrEqual(SqString s,SqString t){ int flag=0; if(s.length!=t.length)return flag; else{ for(int i=0;i<s.length;i++){ if(s.data[i]!=t.data[i]){ flag=1; break; } } if(flag==0)return 1; else return 0; } } int StrLength(SqString s){ return s.length; } void Concat(SqString &s,SqString t){ for(int i=0;i<t.length;i++) s.data[s.length+i]=t.data[i]; s.length=s.length+t.length; } SqString SubStr(SqString s,int i,int j){ SqString str; str.length=0; if(i<=0||j<0||j>s.length||i+j>s.length+1) return str; for(int k=0;k<j;k++){ str.data[k]=s.data[k+i]; } str.length=j; return str; } SqString InsStr(SqString s1,int i,SqString s2){ SqString str; if(i<=0||i>s1.length+1)return str; for(int m=0;m<i;m++){ str.data[m]=s1.data[m]; } for(int l=0;l<s2.length;l++){ str.data[i+l]=s2.data[l]; } for(int k=0;k<s1.length-i;k++){ str.data[i+s2.length+k]=s1.data[k+i]; } str.length=s1.length+s2.length; return str; } SqString DelStr(SqString s,int i,int j){ SqString str; if(i<=0||j>s.length||j<0||i+j>s.length+1)return str; for(int k=0;k<i-1;k++){ str.data[k]=s.data[k]; } for(int l=0;l<s.length-i-j;l++){ str.data[l+i-1]=s.data[l+i+j-1]; } str.length=s.length-j; return str; } SqString RepStr(SqString s,int i,int j,SqString t){ SqString str; if(i<=0||j<0||i+j>s.length+1)return str; for(int k=0;k<i;k++){ str.data[k]=s.data[k]; } for(int l=0;l<j;l++){ str.data[i+l]=t.data[l]; } for(int m=0;m<s.length-i-j;m++){ str.data[i+j+m]=s.data[i+j+m]; } str.length=s.length; return str; } void DispStr(SqString s){ for(int i=0;i<s.length;i++){ cout<<s.data[i]<<" "; } cout<<endl; } int main(){ ElemType a[]={'a','b','c','d','e','f','g','\0'}; ElemType b[]={'h','i','j','k','l','m','n','\0'}; ElemType c[]={'x','y','z','\0'}; SqString s1,s2,s3,s4; StrAssign(s1,a); StrAssign(s2,b); StrAssign(s3,c); StrCopy(s4,s3); DispStr(s3); cout<<StrEqual(s3,s4)<<" "<<StrLength(s1)<<endl; Concat(s1,s3); DispStr(s1); s2=SubStr(s2,2,5); DispStr(s2); s2=InsStr(s2,3,s3); DispStr(s2); s2=DelStr(s2,1,4); DispStr(s2); s1=RepStr(s1,2,2,s2); DispStr(s1); }
原文地址:http://blog.csdn.net/whu_sky/article/details/41420293