c语言 数据结构 串的一些简单操作

C语言菜鸡,有错误的话,可以指出来,修改,捂脸遁走,存一份代码,免得以后找不到

#include <stdio.h>
#define MSIZE 256
typedef char ElementType;
typedef int BOOL;

typedef struct
{
	ElementType data[MSIZE];
	int length;
}SeqString;

//初始化串
void InitString(SeqString *pstr)
{
	pstr->length = 0;
}

//将char类型数据赋值给seqstring的data数据中
void CreateString(SeqString * pstr, const char * achar)
{
	int i = 0;
	while (achar[i] != '\0')
	{
		pstr->data[i] = achar[i];
		pstr->length++;
		i++;
	}
	pstr->data[i] = '\0';
}

//计算串长
int ComputeStringLength(SeqString * pstr)
{
	return pstr->length;

}

//串连接(分情况)
/*
1.当S1.length+S2.length<=MAXLEN时,则将S2直接加在S1的后面
2.当S1.length+S2.length>MAXLEN时,而S1.length<MAXLEN时,则与S1连接后
S2中超出MAXLEN的部分被截断
3.当S1.length==MAXLEN时,则S2全部被舍弃,不需要连接
*/
BOOL strCat(SeqString s1, SeqString s2, SeqString * s)
{
	int  i = 0, j, len1, len2;
	len1 = s1.length;
	len2 = s2.length;
	if (len1 + len2 <= MSIZE)
	{
		j = 0;
		while (s1.data[j] != '\0')
		{
			s->data[i] = s1.data[j];
			i++;
			j++;
		}
		j = 0;
		while (s2.data[j] != '\0')
		{
			s->data[i] = s2.data[j];
			i++;
			j++;
		}
		return 1;
	}
	else if (s1.length < MSIZE && len1 + len2 > MSIZE)
	{
		for (i = 0; i < s1.length; i++)
			s->data[i] = s1.data[i];
		for (i = s1.length; i < MSIZE; i++)
			s->data[i] = s2.data[i - s1.length];
		s->length = MSIZE;
		return 0;
	}
	else
	{
		for (i = 0; i < s1.length; i++)
			s->data[i] = s1.data[i];
		return 0;
	}
}

//串比较
int strcmp(SeqString s1, SeqString s2)
{
	//已知s1,s2,若s1 > s2,返回1;若s1 < s2,返回0;
	int i;
	for (i = 0; i < s1.length && i < s2.length; i++)
	{
		if (s1.length != s2.length)
		{
			if (s1.length > s2.length)
				return 1;
			else
				return -1;
		}
	}
	return 0;
}

//串复制
void strcpy(SeqString *s1,SeqString s2)
{
	//将s2的值赋给s1
	int i;
	for (i = 0; i < s2.length; i++)
	{
		s1->data[i] = s2.data[i];
	}
	s1->length = s2.length;
}

void main(void)
{
	SeqString as,bs, mystring;
	const char * ac = "abcddcba";
	const char * bc = "mko";

	InitString(&as);   //初始化
	InitString(&bs);

	CreateString(&as, ac);   //将char类型数据赋值给seqString中的data
	CreateString(&bs, bc);
	
	strCat(as, bs, &mystring);     //串连接

	int len;
	len = strcmp(as, bs);         //串比较

	strcpy(&as,bs);               //串复制
}

推荐一个:https://blog.csdn.net/lijiedebiancheng/article/details/84206579

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值