自定义字符串处理函数(求长度,拷贝、拼接、比较)--两种方法

 

(1)用指针作为函数形参

/*
编写4个函数分别实现
(1)两个字符数组内容拼接
(2)两个字符数组内容拷贝
(3)求字符数组内字符串长度
(4)两个数组内容的比较
类似于字符串处理函数strcat 、 strcpy 、 strlen、strcmp的作用 。
(方法1--用指针做形参)
*/
#include <iostream>
using namespace std;
char *str_cat(char * str1,char * str2); //两个字符数组内容拼接
char *str_cpy(char * str1,char * str2); //两个字符数组内容拷贝
int str_len(char * str1);  //获取字符指针所指字符串长度
int str_cmp(char * str1,char * str2); //两个数组内容的比较

int main()
{ 
  char str1[50]; 
  char str2[25];

  cout<<"请输入str1数组中要存放的字符串:";
  gets(str1);  //输入字符串
  cout<<"请输入str2数组中要存放的字符串:";
  gets(str2);  //输入字符串

  char *p1=str1; //字符指针p1指向字符数组str1的第一个元素
  char *p2=str2; //字符指针p2指向字符数组str2的第一个元素

  cout<<"\n数组str1中字符串内容为"<<p1<<endl;
  cout<<"数组str1中字符串长度为"<<str_len(p1)<<endl<<endl; //输出字符串长度

  cout<<"数组str2中字符串内容为"<<p2<<endl;
  cout<<"数组str2中字符串长度为"<<str_len(p2)<<endl<<endl;//输出字符串长度


  cout<<"数组str1和数组str2中内容比较结果:"<<endl;

  int result=str_cmp(p1,p2); //字符串内容比较

  if(result==0)
	  cout<<p1<<"相等"<<p2<<endl;
  else if(result>0)
	  cout<<p1<<"大于"<<p2<<endl;
      else 
	  cout<<p1<<"小于"<<p2<<endl;
  
  cout<<"\n将数组str2中的内容拷贝到数组str1中后"<<endl;
  str_cpy(p1,p2); // str_cpy(str1,str2);  字符串拷贝
  cout<<"数组str1中字符串内容为"<<p1<<endl; 
  cout<<"数组str2中字符串内容为"<<p2<<endl<<endl;

  cout<<"\n将数组str2中的内容拼接到数组str1中后"<<endl;
  str_cat(p1,p2); // str_cat(str1,str2);   字符串拼接
  cout<<"数组str1中字符串内容为"<<p1<<endl; 
  cout<<"数组str2中字符串内容为"<<p2<<endl<<endl;

  return 0;
}

//字符串拼接函数,将str2所指向的字符串拼接到str1所指字符串的后面,返回str1(地址)
char *str_cat(char * str1,char * str2) 
{
	char *p1=str1,*p2=str2; //因为要返回串1地址,需要记录串1地址
	while(*p1!='\0') //地位串1的终止字符'\0'的位置
		p1++;
	while(*p2!='\0') //从串1的'\0'位置开始拷贝串2的内容
	{
	   *p1=*p2;
	   p1++;
	   p2++;	
	}
	*p1='\0';    //将串1最后加上'\0'作为串终止字符
    return str1; //返回串1地址(str1)
}

char *str_cpy(char * str1,char * str2) //将指针str2所指字符串内容复制到str1所指的数组中,返回str1(地址)
{   char *p1=str1,*p2=str2;
	while(*p2!='\0')  //对应位置元素拷贝
	{*p1=*p2; 
	 p1++;
	 p2++;
	}
    *p1='\0';   //将串1最后加上'\0'作为串终止字符
    return str1;  //返回串1地址(str1)
}

int str_len(char * str1)//获取字符指针所指字符串长度,返回串的长度
{
 int len=0;
 while((*str1)!='\0') //统计串中第一个'\0'之前的字符个数
 { len++;
   str1++;
 }
 return len;
}

int str_cmp(char * str1,char * str2)//两个数组内容的比较,返回两串中对应位置第一个不同字符之间的差值
{
  int result;
  while((*str1)==(*str2)&&(*str1)!='\0') //找到第一个对应位置不相同的字符
  {
    str1++;
	str2++;
  }
  result=(*str1)-(*str2);  //第一个对应位置不相同的字符的差值
  return result;  
}


 

 

(2)方法2--用数组做函数形参

/*
编写4个函数分别实现
(1)两个字符数组内容拼接
(2)两个字符数组内容拷贝
(3)求字符数组内字符串长度
(4)两个数组内容的比较
类似于字符串处理函数strcat 、 strcpy 、 strlen、strcmp的作用 。
(方法2--用数组做形参)
*/
#include <iostream>
using namespace std;
char *str_cat(char str1[],char str2[]); //两个字符数组内容拼接
char *str_cpy(char str1[],char str2[]); //两个字符数组内容拷贝
int str_len(char str1[]);  //获取字符数组中字符串长度
int str_cmp(char str1[],char str2[]); //两个数组内容的比较

int main()
{ 
  char str1[50]; 
  char str2[25];

  cout<<"请输入str1数组中要存放的字符串:";
  gets(str1);  //输入字符串
  cout<<"请输入str2数组中要存放的字符串:";
  gets(str2);  //输入字符串

  //char *p1=str1; //字符指针p1指向字符数组str1的第一个元素
  //char *p2=str2; //字符指针p2指向字符数组str2的第一个元素

  cout<<"\n数组str1中字符串内容为"<<str1<<endl;
  cout<<"数组str1中字符串长度为"<<str_len(str1)<<endl<<endl; //输出字符串长度

  cout<<"数组str2中字符串内容为"<<str2<<endl;
  cout<<"数组str2中字符串长度为"<<str_len(str2)<<endl<<endl;//输出字符串长度


  cout<<"数组str1和数组str2中内容比较结果:"<<endl;

  int result=str_cmp(str1,str2); //字符串内容比较

  if(result==0)
	  cout<<str1<<"相等"<<str2<<endl;
  else if(result>0)
	  cout<<str1<<"大于"<<str2<<endl;
      else 
	  cout<<str1<<"小于"<<str2<<endl;
  
  cout<<"\n将数组str2中的内容拷贝到数组str1中后"<<endl;
  str_cpy(str1,str2);  //字符串拷贝
  cout<<"数组str1中字符串内容为"<<str1<<endl; 
  cout<<"数组str2中字符串内容为"<<str2<<endl<<endl;

  cout<<"\n将数组str2中的内容拼接到数组str1中后"<<endl;
  str_cat(str1,str2);   //字符串拼接
  cout<<"数组str1中字符串内容为"<<str1<<endl; 
  cout<<"数组str2中字符串内容为"<<str2<<endl<<endl;

  return 0;
}

//字符串拼接函数,将str2中字符串拼接到str1中字符串的后面,返回str1(地址)
char *str_cat(char str1[],char str2[]) 
{
	int i=0,j=0;
	while(str1[i]!='\0') //地位串1的终止字符'\0'的位置
		i++;
	while(str2[j]!='\0') //从串1的'\0'位置开始拷贝串2的内容
	{
	   str1[i]=str2[j];
	   i++;
	   j++;	
	}
	str1[i]='\0';    //将串1最后加上'\0'作为串终止字符
    return str1; //返回串1地址(str1)
}

char *str_cpy(char str1[],char str2[]) //将str2中字符串内容复制到str1数组中,返回str1(地址)
{  	int i=0,j=0;
    while(str2[j]!='\0')
	{
	   str1[i]=str2[j];
	   i++;
	   j++;	
	}
	str1[i]='\0';    //将串1最后加上'\0'作为串终止字符
    return str1;  //返回串1地址(str1)
}

int str_len(char str1[])//获取字符串长度,返回串的长度
{
 int len=0,i=0;
 while(str1[i]!='\0') //统计串中第一个'\0'之前的字符个数
 { len++;
   i++;
 }
 return len;
}

int str_cmp(char str1[],char str2[])//两个数组内容的比较,返回两串中对应位置第一个不同字符之间的差值
{
  int result;
  int i=0;
  while(str1[i]==str2[i]&&str1[i]!='\0') //找到第一个对应位置不相同的字符
      i++;
  result=str1[i]-str2[i];  //第一个对应位置不相同的字符的差值
  return result;  
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值