自我实现——字符串函数strcpy、strcat、strcmp的功能(2)

目录

引言:        

一、strcpy函数介绍:

1.声明:

2.功能:

3.底层代码:

4.实现代码:

二、strcat函数介绍:

1.声明:

2.功能:

3.底层代码:

4.实现代码:

三、strcmp函数介绍:

1.声明:

2.功能:

3.标准规定:

4.底层源码:

5.实现代码:

总结:


引言:        

        在计算机编程中,字符串是一种基本的数据类型,用于存储和处理文本信息。在进行字符串操作时,经常需要进行复制、拼接和比较等操作。为此,C语言提供了一系列字符串函数,其中包括strcpy、strcat和strcmp三个函数,它们分别用于字符串复制、字符串拼接和字符串比较。本文将介绍这三个函数的功能和使用方法。


strncpy、strncat和strncmp函数功能的实现请查看博客:

字符串函数strncpy、strncat、strncmp的功能(3)-CSDN博客


一、strcpy函数介绍:

1.声明:

char * strcpy ( char * destination, const char * source );

2.功能:

复制字符串

将原指向的字符串复制到目标指向的数组中,包括终止null字符(并在该点处停止)。

(为避免溢出,目标指向的数组的大小应该足够长,从而足够包含于原指向字符串(包括终止null字符),并且不应在内存中与原字符串重叠)

3.底层代码:

char * __cdecl strcpy(char * dst, const char * src)
{
        char * cp = dst;

        while((*cp++ = *src++) != '\0')
                ;               /* Copy src over dst */

        return( dst );
}

4.实现代码:

#include 
#include 

char* prayer_strcpy(char* dest, char* src) {
	assert(dest != NULL);
	assert(dest != NULL);
	char* ret = dest;

	while(*src != '\0') {
		*dest++ = *src++;
	}
	*dest = *src;//结束符'\0'拷贝到dest
		return ret;
}

int main() {
	char arr1[] = "Paryer";
	char arr2[] = "Star";
	prayer_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	
	return 0;
}

二、strcat函数介绍:

1.声明:

char * strcat ( char * destination, const char * source );

2.功能:

        把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

3.底层代码:

char * __cdecl strcat (
        char * dst,
        const char * src
        )
{
        char * cp = dst;

        while( *cp )
                cp++;                   /* find end of dst */

        while((*cp++ = *src++) != '\0') ;       /* Copy src to end of dst */

        return( dst );                  /* return dst */

}

4.实现代码:

#include 
#include 
#include 

char* prayer_strcat(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	char* ret = dest;
	while (*dest != '\0') {
		dest++;
	}
	/*while (*src!='\0') {
		*dest++ = *src++;
	}*/
	while (*dest++ = *src++) {
		;
	}
	return ret;
}

int main() {
	char arr1[15] = "Star";
	char arr2[15] = "Prayer";
	prayer_strcat(arr1,arr2);
	printf(arr1);

	return 0;
}

三、strcmp函数介绍:

1.声明:

int strcmp ( const char * str1, const char * str2 );

2.功能:

        从str1与str2的开头依次比较相对应的每一个字符;

        如果它们彼此相等,则继续往后比对,直至字符不同或到达终止字符null。

        此函数执行字符的二进制比较;

        如果需要规定区域比对,strcoll函数或许可以帮到你,本文不会对此进行赘述。

3.标准规定:

        返回一个整数值,该值用来表示字符串之间的关系:

返回值 表明
<0

第一个不匹配的字符在str1中的值小于str2的值

0 两个字符串内容相等
>0 第一个不匹配的字符在str1中的值大于str2的值

4.底层源码:

int __cdecl strcmp (
        const char * src,
        const char * dst
        )
{
        int ret = 0 ;

        while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
                {
                ++src, ++dst;
                }

        return ((-ret) < 0) - (ret < 0); // (if positive) - (if negative) generates branchless code
}

5.实现代码:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
int prayer_strcmp(const char* str1, const char* str2) {
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1 == *str2) {
		if (*str1 == '\0') {
			return 0;
		}
	}
	if (*str1 > *str2) {
		return 1;
	}
	else
		return -1;
}

int main() {
	const char* p1 = "Star";
	const char* p2 = "Prayer";
	int ret = prayer_strcmp(p1, p2);
	printf("%d\n", ret);

	return 0;
}

总结:

        总的来说,strcpy、strcat和strcmp是C语言中常用的字符串函数,它们为字符串操作提供了便捷的方式。通过掌握这三个函数的使用方法,程序员可以更加轻松地处理字符串数据,提高编程效率。然而,在使用这些函数时,也需要注意一些细节问题,比如函数的返回值、参数类型和内存溢出等问题。只有充分理解这些函数的内部原理和用法,才能更好地利用它们为程序开发服务。 

你可能感兴趣的:(C语言,c语言,学习,笔记)