#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize];
int length;
}SqString;
void Assign(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;
for(i=0;i<t.length;i++)
s.data[i]= t.data[i];
s.length=t.length;
}
int StrLength(SqString s)
{
return s.length;
}
int StrEqual(SqString s,SqString t)
{
int i=0;
if(s.length!=t.length){
return 0;
}
else{
for(i=0;i<s.length;i++)
{
if(s.data[i]!=t.data[i])
{
return 0;
}
}
return 1;
}
}
SqString Concat(SqString s,SqString t)
{
SqString r;
int i,j;
for(i=0;i<s.length;i++)
{
r.data[i]=s.data[i];
}
for(j=0;j<t.length;j++)
{
r.data[s.length+j]=t.data[j];
}
r.length=i+j;
return r;
}
SqString SubStr(SqString s,int i,int j)
{
SqString t;
int k,n=0;
if(i<1||i>s.length ||j<1||i+j>s.length+1)
{
t.length=0;
}
else{
for(k=i-1;k<i+j;k++)
{
t.data[n++]=s.data[k];
}
t.length = j;
}
return t;
}
int Index(SqString s,SqString t)
{
int i=0,j=0;
while(i<s.length&&j<t.length)
{
if(s.data[i]==t.data[j])
{
i++;
j++;
}
else{
i=i-j+1;
j=0;
}
}
if(j>=t.length)
{
return i-t.length+1;
}
else
{
return 0;
}
}
int InsStr(SqString &s,int i,SqString t)
{
int j;
if(i<1||i>s.length+1)
{
return 0;
}
else{
for(j=s.length-1;j>=i-1;j--)
{
s.data[j+t.length]=s.data[j];
}
for(j=0;j<t.length;j++)
{
s.data[i+j-1]=t.data[j];
}
s.length = s.length+t.length;
return 1;
}
}
int DelStr(SqString &s,int i,int j)
{
int k;
if(i<1||i>s.length||j<1||i+j>s.length+1)
{
return 0;
}
else{
for(k = i+j-1;k<s.length;k++)
{
s.data[k-j] =s.data[k];
}
s.data[s.length-j]='\0';
s.length = s.length-j;
return 1;
}
}
SqString RepStrAll(SqString s,SqString s1,SqString s2)
{
int i;
i= Index(s,s1);
while(i>0)
{
DelStr(s,i,s1.length);
InsStr(s,i,s2);
i = Index(s,s1);
}
return s;
}
void DispStr(SqString s)
{
int i;
for(i=0;i<s.length;i++)
printf("%c",s.data[i]);
printf("\n");
}
int main(int argc, char** argv) {
SqString s1,s2,s3,s4,s5,s6,s7;
Assign(s1,"IC");
printf("s1:");
DispStr(s1);
printf("s1的长度为:%d\n",StrLength(s1));
printf("s1复制到s2\n");
StrCopy(s2,s1);
printf("s2:");
DispStr(s2);
printf("s1和s2字符串%s\n",(StrEqual(s1,s2)==1?"相同":"不相同"));
Assign(s3,"666654321");
printf("s3:");
DispStr(s3);
printf("s1和s3连接生成s4:\n");
s4 = Concat(s1,s3);
printf("s4:");
DispStr(s4);
printf("s3[2...5]生成s5\n");
s5=SubStr(s3,2,4);
printf("s5:");
DispStr(s5);
Assign(s6,"543");
printf("s6:");
DispStr(s6);
printf("s6在s3中的位置:%d\n",Index(s3,s6));
printf("从s3中删除s2[3...6]字符\n");
DelStr(s3,3,4);
printf("s3:");
DispStr(s3);
printf("s4中将s6替换成s1生成s7\n");
s7 = RepStrAll(s4,s6,s1);
printf("s7:");
DispStr(s7);
return 0;
}
评论