📄 string.cpp
字号:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char *str;
int length;
}HString;
void StringAssign(HString *s,char *t)//将串T的值赋给串S
{
int len;
if (s->str==NULL)//若S已经存在,将它占据空间释放掉
{
free(s->str);
}
len=strlen(t);
s->length=len;
s->str=(char *)malloc(len*sizeof(char)+1);
if (!s->str)
{
s->length=0;
exit(0);
}
else
{
strcpy(s->str,t);
}
}
int StringLength(HString *s)
{
int len;
len=strlen(s->str);
return len;
}
void StringConcat(HString *s,HString *t)//串连接
{
s->length=s->length+t->length;
s->str=strcat(s->str,t->str);
printf("s串:%s\n",s->str);
printf("t串:%s\n",t->str);
}
int StringCompare(HString *s,HString *t)//两串比较
{
if (strcmp(s->str,t->str)==0)
{
return 0;
}
else if (strcmp(s->str,t->str)>0)
{
return 1;
}
else
return -1;
}
void StringClear(HString *s)
{
free(s);
s=NULL;
/* if (s->str)
{
free(s->str);
s->str=NULL;
s->length=0;
}*/
}
int StringIndex(HString *s,HString *t)//返回子串T在主串S的位置,若T并非S的子串,则返回0
{
int i=0,j=0;
while (i<s->length && j<t->length)
{
if (s->str[i]==t->str[j])
{
i++;
j++;
}
else//对应字符不相等,主串指针回溯,子串从头开始
{
i=i-j+1;
j=0;
}
}
if (j==t->length)
{
return i-(t->length)+1;
}
else
return 0;
}
int main()
{
HString *s=(HString *)malloc(sizeof(HString));//初始化
HString *t=(HString *)malloc(sizeof(HString));//初始化
char S[255];
int flag=1;
int select;
char ch;
int len1,len2;//串长
int compare;//
int index;//字串匹配结果
//初始化s,t 串
printf("请输入为s串赋值的字符串:");
gets(S);
StringAssign(s,S);
printf("%s\n",s->str);
printf("请输入为t串赋值的字符串:");
gets(S);
StringAssign(t,S);
printf("%s\n",t->str);
while (flag)
{
printf("1-------StringLength()串长度\n");
printf("2-------StringConcat()串连接\n");
printf("3-------StringCompare()串比较\n");
printf("4-------StringIndex()子串定位\n");
printf("5-------StringClear()串清空\n");
printf("please in put1--5\n");
scanf("%d",&select);
switch(select)
{
case 1:
len1=StringLength(s);
len2=StringLength(t);
printf("s串的长度:%d\n",len1);
printf("t串的长度:%d\n",len2);
break;
case 2:
printf("s,t串的连接:\n");
StringConcat(s,t);
break;
case 3:
printf("s,t串的比较结果:\n");
compare=StringCompare(s,t);
switch(compare)
{
case 0:
printf("s,t串相同\n");
break;
case 1:
printf("s>t串\n");
break;
case -1:
printf("s<t串\n");
break;
}
break;
case 4:
printf("s,t串的匹配:");
index=StringIndex(s,t);
if (index==0)
{
printf("t不是s的子串\n");
}
else
printf("t在s串中的位置:%d\n",index);
break;
case 5:
printf("s串清空(退出操作):");
StringClear(s);
return 0;//退出主程序
// flag=0;
// continue;
break;
}
printf("继续操作(Y|N):");
getchar();
ch=getchar();
if (ch=='n'||ch=='N')
{
flag=0;
}
else
flag=1;
printf("\n");
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -