数组实现串的六种串的基本操作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;
}