c语言实现的串:
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 258
//定义串
typedef char DataType;
typedef struct String
{
DataType data[MaxSize];
int length;
} String;
//初始化
void InitString(String *s)
{
s->length=0;
}
//创建
void creatString(String *s)
{
DataType c;
printf("请输入字符进行创建:\n");
while (c!='\r'&&c!='\n')
{
scanf("%c",&c);
s->data[s->length]=c;
s->length++;
}
s->length--;
}
//串的查看
void getString(String *s)
{
int i;
DataType c;
for (i=0;i<s->length;i++)
{
if (s->data[i]=='\0')
{
printf("有\\0\n");
}
c=s->data[i];
printf("%c",c);
}
printf("\n");
}
//串的拼接
String combinString(String *s1,String *s2)
{
int i,j;
String *s3,s;
s3=&s;
InitString(s3);
i=0;
while(s1->data[i]!='\n'&&s1->data[i]!='\0')
{
s3->data[s3->length]=s1->data[i];
s3->length++;
i++;
}
j=0;
while(s2->data[j]!='\n')
{
s3->data[s3->length]=s2->data[j];
s3->length++;
j++;
}
return s;
}
//串比较
void StrCompare(String *s1,String *s2)
{
int i;
if (s1->length!=s2->length)
{
printf("两个串不相同\n");
}
else
{
for(i=0;i<s1->length;i++)
{
if (s1->data[i]!=s2->data[i])
{
printf("两个串不相同\n");
return;
}
}
printf("两个串相同\n");
}
return;
}
//求子串
String subString(String *s,int start,int len)
{
if (start>s->length+1||start+len>s->length+1)
{
printf("不存在该子串!\n");
}
String s1,*r;
r=&s1;
InitString(&s1);
int i,j=0;
for (i=start-1;i<len;i++)
{
r->data[j]=s->data[i];
r->length++;
j++;
}
return s1;
}
//串的长度
int lenString(String *s)
{
printf("length:%d\n",s->length);
return s->length;
}
//串的销毁
void Destroy(String *s)
{
s->length=0;
free(s->data);
printf("串销毁成功!\n");
}
void main()
{
String sa,sb,sc,sd;
//创建串sa,sb
InitString(&sa);
creatString(&sa);
lenString(&sa);
getString(&sa);
InitString(&sb);
creatString(&sb);
lenString(&sb);
getString(&sb);
//比较串sa与sb
StrCompare(&sa,&sb);
//连接串sa,sb 成sc并销毁sc
sc=combinString(&sa,&sb);
printf("sa与sb连接的串如下:\n");
getString(&sc);
lenString(&sc);
Destroy(&sc);
//求sa从1-2的子串
sd=subString(&sa,1,2);
getString(&sa);
printf("从1-2的子串如下:\n");
getString(&sd);
}
![](https://img2020.cnblogs.com/blog/2028456/202105/2028456-20210509140755206-447052723.png)