#include<stdio.h>
#include<stdlib.h>
#define Maxlen 100
/*求串长*/
int StrLength(char *p)
{
int i=0;
while(p[i]!='\0')
{
i++;
}
return i;
}
/*串比较*/
int StrCompare(char *T,char *p)
{
int i=0;
while(T[i]==p[i]&&T[i]!='\0'&&p[i]!='\0')
{
i++;
}
return T[i]-p[i];
}
/*串连接*/
void StrConcat(char *T,char *p1,char *p2)
{
int i=0,j=0,k=0;
while(p1[i]!='\0')
{
T[j++]=p1[i++];
}
while(p2[k]!='\0')
{
T[j++]=p2[k++];
}
T[j]='\0';
}
/*串复制*/
void StrCopy(char *T,char *p)
{
int i=0;
while(p[i]!='\0')
{
T[i]=p[i];
i++;
}
T[i]='\0';
}
/*求子串,返回从串sub的第i个字符开始长为len的子串,返回0则说明输入的pos或len不正确,返回1表示求子串成功*/
int SubString(char *T,char *sub,int pos,int len)
{
int Tlen=StrLength(T);
if(pos<0||pos>Tlen||len<0||len>Tlen-pos+1)
{
return 0;
}
int i=0;
while(i<len)
{
sub[i]=T[pos-1+i];
i++;
}
sub[i]='\0';
return 1;
}
/*匹配串(BF暴力匹配算法)*/
int StrIndex(char *T,char *p)
{
int i=0,j=0;
while(T[i]!='\0'&&p[j]!='\0')
{
if(T[i]==p[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(p[j]=='\0')
{
return i-j;
}
else
{
return -1;
}
}
int main()
{
char T[Maxlen],p[Maxlen],u[Maxlen],t[Maxlen],sub[Maxlen];
printf("请输入文本串T:"); gets(T);
printf("字符串长度为:%d\n",StrLength(T));
printf("请输入文本串p:"); gets(p);
if(StrCompare(T,p)==0)
{
printf("两个字符串相等\n");
}
else
{
printf("两个字符串不相等\n");
}
printf("两个字符串连接后为t:");
StrConcat(t,T,p);
puts(t);
StrCopy(u,p);
printf("串复制后u:");
puts(u);
SubString(T,sub,2,3);
printf("输出取出的子串sub为:");
puts(sub);
printf("sub在t的第%d位开始匹配",StrIndex(t,sub)+1);
return 0;
}
运行效果截图如下: