自定义字符串处理函数

来源:互联网 发布:微软designer鼠标 知乎 编辑:程序博客网 时间:2024/06/06 08:50

/*
编写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; 
}