C/C++ code//可以运行,后一部分没有检查。
#include "stdio.h"
#include "stdlib.h"
#define MAXLEN 100
typedef struct
{
char ch[MAXLEN];
int Len;
}SString;
void StrAsign (SString *S,char *chars)
{
int i=0;
while(chars[i]!='\0')//here
{
S->ch[i]=chars[i];
i++;
}
S->ch[i]='\0';//here
S->Len=i;
}
void StrCopy(SString *S,SString *T)
{
int i;
for(i=0;iLen;i++)
S->ch[i]=T->ch[i];
S->Len=T->Len;
}
int StrLength(SString *S)
{
return(S->Len);
}
int StrCat(SString *S,SString *T)
{
int i,j=0,flag;
if (S->Len+T->Len<=MAXLEN)
{
for(i=S->Len;iLen+T->Len;i++)
S->ch[i]=T->ch[j++];//这里是连接
S->ch[i]='\0';
S->Len+=T->Len;
flag=1;
}
else if (S->Len
{
for(i=S->Len;i
S->ch[i]=T->ch[i-S->Len];
S->Len=MAXLEN;
flag=0;
}
else
flag=0;
return(flag);
}
int SubString(SString *Sub,SString *S,int pos,int len)
{
int j;
if(pos<1||pos>S->Len||len<1||len>S->Len-pos+1)
{
Sub->Len=0;
printf("参数错误!");
return 0;
}
else
{
for(j=0;j
Sub->ch[j]=S->ch[pos+j-1];
Sub->Len=len;
return 1;
}
}
int StrIndex(SString *S,SString *T)
{
int i=0,j=0,k;
while(iLen&&jLen)
{
if (S->ch[i]==T->ch[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=T->Len)
k=i-T->Len+1;
else
k=-1;
return k;
}
void DispStr(SString *S)
{
int i;
for(i=0;iLen;i++)
printf("%c",S->ch[i]);
}
void main()
{
SString S,T,R,Sub;
int Length,pos,len,loc;
StrAsign(&S,"abcdefgdeg");
printf("\n串S为:");
DispStr(&S);
Length=StrLength(&S);
printf("\n串S的长度为%d",Length);
StrAsign(&T,"deg");
printf("串T为\n");
DispStr(&T);
printf("\n将串T复制给串R,复制后的结果串R为:");
StrCopy(&R,&T);
DispStr(&R);
if(StrCat(&S,&T))
{
printf("\n串S与串T连接后的串S为:");
DispStr(&S);
Length=StrLength(&S);
printf("\n串S的长度为%d:",Length);
}
else
printf("\n串S与串T的连接为成功!");
printf("\n请输入要截取串S的其实位置与截取的长度值分别为:");
scanf("%d %d",&pos,&len);
printf("将串S从第%d个字符开始,将长度为%d的字符序列复制到串Sub中",pos,len);
if(SubString(&Sub,&S,pos,len))
{
printf("\n串Sub为:");
DispStr(&Sub);
Length=StrLength(&Sub);
printf("\n串Sub的长度为%d:",Length);
}
loc=StrIndex(&S,&T);
if(loc==-1)
printf("\n串S与串T匹配失败!");
else
printf("\n串S与串T匹配!匹配位置为%d:",loc);
}