顺序串基本运算

//顺序串基本运算
#include <stdio.h>
#define MAXSIZE 50

int StrLength(char *s);           //求串长
int StrCat(char s1[], char s2[]); //串连接
int SubStr(char *s, char t[], int i, int len);  //求子串
int StrCmp(char *s1, char *s2);   //串比较
int StrInsert(char *s, int i, char *t);         //串插入

int main()
{
	char x1[50] = "abcdefghijk", x2[30] = "mnopqrstuvwxyz", x3[20];
	
	puts(x1);              //输出串1
	printf("Length of string x1 is %d\n", StrLength(x1));    //输出串 x1 的长度
	
	//求两个串的连接
	if (StrCat(x1, x2))
	{
		printf("Output x1 after chain:\n");                  //输出连接后的串 x1
		puts(x1);
	}
	else
	{
		printf("Chain x1 and x2 fail!\n");
	}

	//求一个串的子串
	if (SubStr(x1, x3, 5, 12))                               //对x1 求字串并存放到串x3 中
	{
		printf("String:\n");
		puts(x3);                                            //输出存放在x3 中的子串
	}
	else
	{
		printf("Sub Sting get error!\n");
	}

	//字符串比较函数
	if (StrCmp(x1, x2) > 0)                                
	{
		printf("x1 is larger!\n");
	}
	else
	{
		if (StrCmp(x1, x2) == 0)
		{
			printf("Equal!\n");
		}
		else
		{
			printf("x2 is larger!\n");
		}
	}

	//将字符串插入到串x2 中
	if (StrInsert(x2, 5, "aaaaa"))
	{
		printf("Output x2 after insert!\n");
		puts(x2);
	}
	else
	{
		printf("Insert fail!\n");
	}

	return 0;
}

int StrLength(char *s)
{
	int i = 0;
	while (s[i] != '\0')
	{
		i++;
	}

	return i;
}

int StrCat(char s1[], char s2[])
{
	int i, j, Len1, Len2;
	
	Len1 = StrLength(s1);
	Len2 = StrLength(s2);
	if (Len1 + Len2 > MAXSIZE - 1)
	{
		printf("串长不够,连接失败!\n");
		return 0;
	}

	i = 0;
	j = 0;
	while (s1[i] != '\0')
	{
		i++;
	}

	while (s2[j] != '\0')
	{
		s1[i] = s2[j];
		i++;
		j++;
	}
	s1[i] = '\0';                  //置串结束标志
	
	return 1;
}

int SubStr(char *s, char t[], int i, int len)
{
	int j, Slen;
	
	Slen = StrLength(s);
	if (i > len || i < 1 || len > Slen - i + 1 || len < 0)  //len 是子串的长度
	{
		printf("给定参数有错!\n");
		return 0;
	}

	for (j = 0; j < len; j++)
	{
		t[j] = s[i+j-1];            //从第i-1 个位置开始
	}
	t[j] = '\0';                    //给子串t 置结束标志

	return 1;
}

int StrCmp(char *s1, char *s2)
{
	int i = 0;
	while (s1[i] == s2[i] && s1[i] != '\0')
	{
		i++;
	}

	return (s1[i] - s2[i]);        //返回值可以大于、小于或等于0
}

int StrInsert(char *s, int i, char *t)
{   //将串t 插入到串s 的第i 个字符位置上,指针s 和t 指向存储字符串的字符数组
	char str[MAXSIZE];
	int j, k, len1, len2;

	len1 = StrLength(s);
	len2 = StrLength(t);
	if (i < 0 || i > len1 + 1 || len1 + len2 > MAXSIZE - 1)
	{
		printf("参数不正确或主串s 的数组空间插不下子串t.\n");
		return 0;
	}

	k = i;
	for (j = 0; s[k] != '\0'; j++) 
	{
		str[j] = s[k++];      //第一步:将串s 要插入位置i 之后的子串 先保存下
	}
	str[j] = '\0';

	j = 0;
	while (t[j] != '\0')
	{
		s[i] = t[j];          //第二步:把串t 插入到主串s 的位置i处
		i++;
		j++;
	}

	j = 0;
	while (str[j] != '\0')
	{
		s[i] = str[j];      //第三步:把原来主串i 之后的那个子串,重新接回主串
		i++;
		j++;
	}
	s[i] = '\0';              //置串s 结束标志

	return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值