相信大家对这几个函数相当熟悉,但是能轻松的写出它们的原型及其实现函数吗?恐怕会底气不足吧?那么此文将带你夯实基础,轻松搞定它们,并增进对它们的了解以便今后使用起来胸有成足。
strcat的函数原型如下:
char *strcat(char *strDest, const char *strScr)
下面就用实例演示其写法,并对关键步骤进行注解。
#include "stdio.h"
#include "assert.h"
using namespace std;
char *strcat(char *strDest, const char *strScr) //(1)
{
char * address = strDest;
assert((strDest != NULL) && (strScr != NULL)); //(2)
while(*strDest!='\0')//(3)
{
strDest++;//(4)
}
while(*strDest++ = *strScr++)
{
NULL;
}
return address; //(5)
}
int main()
{
char str1[100]={"i can "};
char str2[50]={"write strcat"};
printf("%s\n",strcat(str1,str2));
return 0;
}
运行结果如下:
(1) 将源字符串加上const声明,表明其为输入参数
(2) 断言assert的用法,如果条件成立程序正常运行,如果不成立报错并终止程序的运行,大家可以自己测试一下assert函数的用法,看看具体的效果如何。
(3) 等价于while(*strDest),若使用while(*strDes++!=’\0’),则会出现strScr不能连接到strDest后面的情况,因为++操作不受循环的约束的,这样while结束时*strDest并没有指向字符串的结束符‘0’,再执行strScr赋值操作已是无用了,因为strDest中已经出现结束符‘\0’了。
(4) 为了实现链式操作,将目的地址返回
看完之后是不是觉得很简单,那么下面其他函数的实现就不过多解释了,请诸君自己体会。
strcpy函数原型如下:
char *strcpy(char *strDest, const char *strScr)
其实现代码和运行结果如下所示:
#include "stdio.h"
#include "assert.h"
char *strcpy(char *strDest, const char *strScr)
{
char *address = strDest;
assert((strDest != NULL) && (strScr != NULL));
while(*strScr)
{
*strDest++ = *strScr++;
}
*strDest = '\0';
return address;
}
void main()
{
char str1[100]={"i can write strcpy "};
char str2[50]={"strcpy is so easy"};
printf("%s\n",strcpy(str1,str2));
}
运行结果如下:
strcmp的函数原型如下:
int strcmpa (const char *str1,const char *str2)
其实现代码及运行结果如下:
#include <stdio.h>
#include <assert.h>
int strcmpa (const char *str1,const char *str2)
{
int len = 0;
assert((str1 != '\0') && (str2 != '\0'));
while(*str1 && *str2 && (*str1==*str2))
{
str1++;
str2++;
}
if((*str1-*str2)>0)//(1)
return 1;
else if((*str1-*str2)<0)
return -1;
else
return 0;
}
void main()
{
char str1[100] = {"abcd"};
char str2[50] = {"bcde "};
printf("%d\n",strcmpa(str1,str2));
}
(1)根据编译器不同其返回值有所不同,对VS和VC编译器而言,返回值就如同代码所述一样。
运行结果如下:
strlen的函数原型如下:
int strlena(const char *str)
其实现代码及运行结果如下:
#include <stdio.h>
#include <assert.h>
int strlena(const char *str)
{
int len = 0;
assert(str != NULL);
while(*str++)
{
len++;
}
return len;
}
int main()
{
char str1[100] = {"strlen is so easy"};
char str2[50] = {"i love C/C++"};
printf("strlen is so easy的长度为:");
printf("%d\n",strlena(str1));
printf("i love C/C++的长度为:");
printf("%d\n",strlena(str2));
return 0;
}
运行结果如下:
掌握这些函数的原型及写法,不仅可以更好的运用它,更能练习字符串的相关处理的基本功,何乐不为。