前言
本文 着重对 strcat \ strcmp \ strcpy 以及
strncat\strncmp\strncpy 的介绍。
提示:以下是本篇文章正文内容,下面案例可供参考
一、strcpy and strncpy?
1.strcpy
strcpy 是有关字符串拷贝的函数 该函数的所需要传的参数类型为
char* strcpy(char * destination, const char * source );
将source指向的字符串,拷贝给destination指向的字符串
例子如下:
int main()
{
char arr1[20] = "xxxxxxx";
char arr2[] = "hellpwwda";
strcpy(arr1, arr2);
printf("%s\n", arr1);
}
注意:
- 源字符串必须以 '\0' 结束。
- 会将源字符串中的 '\0' 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
2.strncpy
strncpy 用法与strcpy 用法相似,但多了一个参数 num
char * strncpy ( char * destination, const char * source, size_t num );
num表示要拷贝元素的个数 ,从起始位置开始拷贝,顶替目标字符串的元素所在位置 。
例子如下:
int main()
{
char arr1[20] = "abcdefgh";
char arr2[] = "qwer";
strncpy(arr1, arr2, 2);
printf("%s\n", arr1);
}
注意:
- 拷贝num个字符从源字符串到目标空间。
- 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个
二、strcat and strncat?
1.strcat
strcat 是有关字符串追加字符的函数 下面是该函数所需传的参数类型:
char * strcat ( char * destination, const char * source );
用途:将source中的内容,追加到destination 之后
例子如下:
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s", arr1);
}
运行结果:
注意:
- 源字符串必须以 '\0' 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
2.strncat
strncat 与strcat 用途相似
char * strncat ( char * destination, const char * source, size_t num );
num 表示追加的字符个数
例子:
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
strncat(arr1, arr2,3);
printf("%s", arr1);
}
运行结果如下:
三、strcmp and strncmp
1.strcmp
strcmp 是有关字符串比较的函数 比较的是字符的ASCII码得值。
传入参数如下:
int strcmp ( const char * str1, const char * str2 );
标准规定:
第一个字符串大于第二个字符串,则返回大于
0
的数字
第一个字符串等于第二个字符串,则返回
0
第一个字符串小于第二个字符串,则返回小于
0
的数字
例子如下:
int main()
{
char p[] = "obc";
char q [] = "abcdef";
int ret = strcmp(q, p);
printf("%d\n", ret);
}
运行结果如下:
2.strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
num 表示从第一个字符开始要比较的字符个数
比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。
四、strcpy strcat and strcmp 的实现
注:指针均不为空指针;为了保险起见,可以加上assert 断言语句
1.strcpy
char *my_strcpy(char *dest, const char*src)
{
char *ret = dest;
while((*dest++ = *src++))
{
;
}
return ret;
}
2.strcat
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
//1.找到目标函数中的\0
while (*dest)
{
dest++;
}
//2.追加字符串
while (*dest++ = *src++);
return ret;
}
首先,找到'\0' ,然后进行替换,之后追加即可
3.strcmp
原版,在VS的编译环境下 返回值为1,0,-1;
int my_cmp(const char* s1,const char* s2)
{
while (*s1 == *s2)
{
if (*s1 == '\0')
{
return 0;
}
s1++;
s2++;
}
if (*s1 > *s2)
{
return 1;
}
else
return -1;
}
改进版本:只要符合s1大于s2返回正值,小于返回负值即可
int my_cmp(const char* s1,const char* s2)
{
while (*s1 == *s2)
{
if (*s1 == '\0')
{
return 0;
}
s1++;
s2++;
}
return *s1 - *s2;
}
总结
要熟练掌握这些类函数的用法,并且了解如何实现他们的。