#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include<stdbool.h>
#define SIZE 20
typedef struct Str{
char elem[SIZE];
int length;
}Str;
void StrAssign(Str *s,const char*chars){
assert(s!=NULL);
int len=strlen(chars);
s->length=len;
for(int i=0;i<len;i++){
s->elem[i]=chars[i];
}
}
void StrCpy(Str*s,Str*t){
for(int i=0;i<t->length;i++){
s->elem[i]=t->elem[i];
}
s->length=t->length;
}
int Getlength(Str *s){
return s->length;
}
void Clear(Str *s){
s->length=0;
}
bool SubStr(Str *sub,Str *s,int pos,int len){
if(pos<0||len<1||pos>=s->length||pos+len>s->length-1){
return false;
}
for(int i=pos;i<pos+len;i++){
sub->elem[i-pos]=s->elem[i];
}
sub->length=len;
return true;
}
bool Insert(Str *s,int pos,Str *t){
assert(s!=NULL);
assert(t!=NULL);
if(pos<0||pos>s->length||pos+t->length>SIZE){
return false;
}
for(int i=s->length-1;i>=pos;i--){
s->elem[i+t->length]=s->elem[i];
}
for(int j=0;j<t->length;j++){
s->elem[j+pos]=t->elem[j];
}
s->length+=t->length;
return true;
}
int BF(Str *s,Str *sub,int pos){
if(pos<0||pos>s->length){
return -1;
}
int i=pos;
int j=0;
int lens=s->length;
int lensub=sub->length;
while(i<lens&&j<lensub){
if(s->elem[i]==sub->elem[j]){
i++;
j++;
}
else{
i=i-j+1;
j=0;
}
}
if(j>=lensub){
return i-j;
}
else{
return -1;
}
}
bool DeletePos(Str* s,int pos,int len){
assert(s!=NULL);
if(pos<0||pos+len>s->length||len<0){
return false;
}
for(int i=pos;i<s->length-len;i++){
s->elem[i]=s->elem[i+len];
}
s->length-=len;
return true;
}
bool Delete(Str *s,int pos,Str *t){
assert(s!=NULL);
assert(t!=NULL);
if(pos<0||pos>s->length||t->length>s->length){
return false;
}
int index=BF(s,t,pos);
if(index<0){
return false;
}
return DeletePos(s,index,t->length);
}
bool Replace(Str *s,Str *t,Str *v,int pos){
assert(s!=NULL);
assert(t!=NULL);
assert(v!=NULL);
int index=BF(s,t,pos);
if(index<0){
return false;
}
DeletePos(s,index,t->length);
return Insert(s,index,v);
}
bool ReplaceAll(Str *s,Str *t,Str *v){
assert(s!=NULL);
assert(t!=NULL);
assert(v!=NULL);
while(Replace(s,t,v,0));
return true;
}
void Show(Str *s){
for(int i=0;i<Getlength(s);i++){
printf("%c",s->elem[i]);
}
printf("\n");
}
int main(){
Str s;
char *s1="abcdefd";
StrAssign(&s,s1);
Show(&s);
Str t;
char *t1="cd";
StrAssign(&t,t1);
Show(&t);
Str v;
char *v1="zkr";
StrAssign(&v,v1);
Show(&v);
ReplaceAll(&s,&t,&v);
Show(&s);
system("pause");
return 0;
}
既然中文字符乱码了 先解决乱码问题再说
都用utf8吧