串——数据结构的实现——定长存储顺序。
//头文件sstring.h #pragma once #include<iostream> using namespace std; #define STRING_SIZE 20 typedef char Sstring[STRING_SIZE+1]; int length(Sstring S) { return strlen(S); } void StrAssign(Sstring T, char *str) { int i=0; while(*str != '\0') { T[i++] = *str++; } T[i] = '\0'; } bool StringConcat(Sstring T,Sstring s1,Sstring s2) { int a = length(T); int b = length(s1); int c = length(s2); if(a>b+c) { for(int i=0;i<b;i++) { T[i] = s1[i];} for(int j= b; j < b+c;j++) { T[j] = s2[j];} T[j] = '\0'; return true; } else if(a>b && a<b+c) { for(int i=0;i<b;i++) { T[i] = s1[i];} for(int j=b;j<=STRING_SIZE;j++) { T[j] = s2[j];} T[j] = '\0'; return true; } else if(a<b) { for(int i=0;i<=STRING_SIZE;i++) {T[i] = s1[i];} T[i] = '\0'; } return true; } void StrCopy(Sstring T, Sstring S) { int i=0; while(S[i] != '\0') { T[i] = S[i]; i++; } T[i] = '\0'; } bool StrEmpty(Sstring S) { if(S[0] == '\0') return false; return true; } int StrCompare(Sstring T, Sstring S) { int i=0; while(T[i]-S[i] == 0) { i++; } if(T[i]-S[i]>0) return 1; if(T[i]-S[i]<0) return -1; else return 0; } void ClearString(Sstring T) { int i=0; T[i]='\0'; } char * SubString(Sstring T,int pos,int len,Sstring S) { if(length(T)<pos+len) return false; for(int i= 0;i<len;i++) { S[i] = T[i+pos]; } S[i] = '\0'; return S; } int Index(Sstring S,Sstring T,int pos) { int s_len=length(S); int t_len=length(T); for(int i=pos;i<=s_len - t_len;i++) { for(int j=0;j <= t_len;++j) { if(S[j+i]==T[j]) { if(j == t_len-1) {return i;} else {continue;} } else break; } } return 0; } bool Replace(Sstring S,Sstring T,Sstring V) { int sl=length(S); int tl=length(T); for(int i=0;i<sl-tl;i++) { for(int j=0;j <= tl;++j) { if(S[j+i]==T[j]) { if(j == tl-1) { for(int m =0;m<tl;m++) { S[m+i] = V[m]; } } else {continue;} } else break; } } return 0; } bool StrInsert(Sstring S,int pos,Sstring T) { //1<=pos<=length(S)+1 int sl=length(S); int tl=length(T); if(pos>sl+1) return false; for(int i=0;i<=sl-pos;i++) { S[sl+tl-i]=S[sl-i]; } for(int j=pos;j<tl+pos;j++) { S[j] = T[j-pos]; } return true; } bool StrDelete(Sstring S,int pos,int len) { if(pos>length(S)+1) return false; for(int i=pos;i<length(S)-pos;i++) { S[i]=S[i+len]; } return true; } void DestroyString(Sstring S) { S[0]='\0'; }
主函数:
#include"sstring.h" void main() { char *str1="asdcsdhasda"; char *str2="sd"; char *str3="zr"; Sstring S; Sstring T; Sstring V; StrAssign(S,str1); StrAssign(T,str2); StrAssign(V,str3); Replace(S,T,V); //StrInsert(S,3,T); //StrDelete(S,1,2); /* int ret=Index(S,T,3); cout<<ret<<endl; */ //int ret=StrCompare(T,S); //StrCopy(S,T); //cout<<ret<<endl; //cout<<SubString(T,0,5,S)<<endl; //cout<<length(S)<<endl; cout<<S<<endl; }
注释部分为各函数的,图片没有一一附上。
时间: 2024-10-26 19:37:35