数组实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数

70 篇文章 3 订阅
30 篇文章 11 订阅

数组实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数 

/*
实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,
StrLength,Concat和SubString的函数 
*/

//结点 
typedef struct node{
	char data;
}node,*pnode;
#include <stdio.h>
#define N 51
//取较大值 
int mmax(int a,int b);
//打印 串 
void print_string(char *a);
//成员函数assign()用于分配,把一个 string b对象的从index下标开始的部分内容拷贝到另一个 string a对象上并覆盖原数据。
void StrAssign(char *a,char *b,int index);//--1
//串的复制 操作 b复制给a 
void StrCopy(char *a,char *b);//--2
//串的比较操作 
void StrCompare(char *a,char *b);//--3
//获取串的长度 
int StrLength(char *a);//--4
//串的连接 b连接到a的末尾 
void Concat(char *a,char *b);//--5
//用于截取字符串的某部分,其基本语法为substring(字符串,起始位置(下标),截取长度)
char *SubString(char *a,int begin,int length);//--6

//主函数 
int main()
{
	//test_one
	char a[N] = {'a','b','c','d','e','f','g','h','f','a','b','c','d','e','f','g','h','f'};
	char b[N] = {'i','h','g','f','e','d','c','b','a'};
	char *sub = NULL;
	//打印各串
	print_string(a);
	print_string(b);
//	print_string(sub);

	//test each function
	
	/*
	StrAssign(a,b,2);//分配 --1
	print_string(a);
	*/
	
	/*
	StrCopy(a,b);//--2
	print_string(a);
	*/
	
	/*
	StrCompare(a,b);--3
	*/
	/*
	printf("a: %d b: %d",StrLength(a),StrLength(b));--4
	*/
	/*
	Concat(a,b);//--5
	print_string(a);
	*/
	sub = SubString(a,10,8);
	print_string(sub);
	return 0;
}
//取较大值 
int mmax(int a,int b)
{
	return a > b ? a : b;
}
//成员函数assign()用于分配,把一个 string b对象的从 index下标 开始的部分内容拷贝到另一个 string a对象上。
void StrAssign(char *a,char *b,int index)//--1
{
	//a,b不为空 
	if(a == NULL || b == NULL)
	{
		return;
	}
	
	//取a串b串中最长的长度
	int size = mmax(StrLength(a),StrLength(b) - index);
	for(int i = 0;i < size;i ++)
	{
		a[i] = b[index + i];
	}
	return;
}
//串的复制 操作 b复制给a 
void StrCopy(char *a,char *b)//--2
{
	//b不为空 
	if(b == NULL)
	{
		return;
	}
	
	//取a串b串中最长的长度
	int size = mmax(StrLength(a),StrLength(b));
	for(int i = 0;i < size;i ++)
	{
		a[i] = b[i];
	}
	return;
}
//串的比较操作 
void StrCompare(char *a,char *b)//--3
{
	int i = 0;
	//比较 
	while( *(a + i) != '\0' || *(b + i) != '\0')
	{
		if(*(a + i) == *(b + i))
		{
			i ++;
			continue;
		}
		else;
		
		if(*(a + i) > *(b + i))
		{
			printf("前者大");
		}
		else if(*(a + i) < *(b + i))
		{
			printf("后者大");
		}
		else
		{
			printf("一样大");
		}

		break;
	}
	
	if(*(a + i) == '\0' && *(b + i) == '\0')
	{
		printf("一样大");
	}
	else if(*(a + i) != '\0' && *(b + i) == '\0')
	{
		printf("前者大");
	}
	else if(*(a + i) == '\0' && *(b + i) != '\0')
	{
		printf("后者大");
	}
	else;
	
	return;
}

//获取串的长度 
int StrLength(char *a)//--4
{
	int length = 0;
	while(*(a + length) != NULL ){length ++;}
	return length;
}

//串的连接 b连接到a的末尾 
void Concat(char *a,char *b)//--5
{
	int len_a = StrLength(a);
	for(int i = 0;b[i] != '\0';i ++)
	{
		a[len_a + i] = b[i];
	}
	return;
}

//用于截取字符串的某部分,其基本语法为substring(字符串,起始位置(下标),截取长度)
char *SubString(char *a,int begin,int length)//--6
{
	char sub[N] = {'\0'}; 
	for(int i = 0;i < length;i ++)
	{
		sub[i] = a[begin + i];
	}

	char *s = sub;//由于返回的 是指针类型,故不能返回一个数组名 得返回一个指针
	return s;
}
//打印 串 
void print_string(char *a)
{
	for(int i = 0;a[i] != '\0';i ++)
	{
		printf("%c ",a[i]);
	}
	printf("\n");
	return;
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值