(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;
}