⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.cpp

📁 用C语言编写实现数据结构方面的例子
💻 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 + -