strlen,strcpy,strcat,strcmp详解

strlen

strlen 是 C 语言中的一个字符串处理函数,用于计算一个字符串的长度,即字符串中的字符个数(不包括结尾的空字符 \0)。

strlen 函数的原型定义在 <string.h> 标准库头文件中:

size_t strlen(const char* str);

参数 str 是一个指向以空字符 \0 结尾的字符串的指针。函数会遍历该字符串,直到遇到 \0 终止符,并返回计数器的值。

下面是一个使用 strlen 函数的示例:

#include <stdio.h>
#include <string.h>

int main() {
    const char* str = "Hello, world!";
    size_t length = strlen(str);
    printf("字符串的长度为:%zu\n", length);
    
    return 0;
}

输出结果为:字符串的长度为:13

请注意,在使用 strlen 函数时,确保所传递的参数是以 \0 结尾的有效字符串,以避免未定义的行为。

strlen 函数返回的类型是 size_t,它是无符号整数类型,可以存储比 int 类型更大的整数值。


实现及原理

size_t my_strlen(const char* str)
{
	size_t count = 0;
	while (*str++)
	{
		count++;
	}
	return count;
}


int main()
{
	char str[] = "abcdef";
	int len = my_strlen(str);
	printf("%d", len);
	return 0;
}


size_t my_strlen(const char* str)
{
	if (*str == '\0')
	{
		return 0;
	}
	else
	{
		return 1 + my_strlen(str + 1);
	}
}


int main()
{
	char str[] = "abcdef";
	int len = my_strlen(str);
	printf("%d", len);
	return 0;
}


strcpy

strcpy是C语言中的一个字符串操作函数,用于将一个字符串拷贝到另一个字符串中。其函数原型如下:

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

该函数接受两个参数,分别是目标字符串destination和源字符串source。它将源字符串source的内容拷贝到目标字符串destination中,并返回目标字符串的指针。

需要注意的是,如果目标字符串destination不具备足够的空间来容纳源字符串source(包括源字符串的结尾空字符’\0’),会导致内存越界错误。确保destination有足够的空间来存放拷贝后的字符串是非常重要的。

示例用法如下:

#include <stdio.h>
#include <string.h>

int main() {
   char source[] = "Hello, World!";
   char destination[20];

   strcpy(destination, source);

   printf("目标字符串: %s\n", destination);
   return 0;
}

输出结果为:

目标字符串: Hello, World!

在这个示例中,strcpy函数将source字符串中的内容拷贝到destination字符串中。destination数组有足够的空间来存放source字符串,所以拷贝操作成功。

实现及原理

char* my_strcpy(char* dest, const char* src)
{
    char* ret = dest; // 保存目标字符串的起始指针
    assert(dest != NULL); // 断言目标字符串指针不为NULL
    assert(src != NULL); // 断言源字符串指针不为NULL

    while ((*dest++ = *src++))
    {
        // 逐个字符复制,并判断是否复制完毕
        ;
    }
    return ret; // 返回目标字符串的起始指针
}


strcmp

strcmp是C语言中的一个字符串操作函数,用于比较两个字符串的大小。其函数原型如下:

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

该函数接受两个参数,分别是待比较的字符串str1和str2。它按字典顺序比较两个字符串,并返回一个整数值,表示它们的大小关系。具体返回值的含义如下:

  • 若返回值小于 0:表示str1小于str2;
  • 若返回值等于 0:表示str1等于str2;
  • 若返回值大于 0:表示str1大于str2。

strcmp函数会逐个比较两个字符串中对应位置上的字符,直到出现比较结果不同的字符,或者其中一个字符串结束为止。需要注意,strcmp函数区分大小写,并基于字符的ASCII码进行比较。

以下是一个示例用法:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";

    int result = strcmp(str1, str2);
    if (result < 0) {
        printf("str1 小于 str2\n");
    } else if (result == 0) {
        printf("str1 等于 str2\n");
    } else {
        printf("str1 大于 str2\n");
    }
    return 0;
}

输出结果为:

str1 小于 str2

在这个示例中,strcmp函数比较了两个字符串"apple"和"banana",并返回一个小于 0 的值,表示str1小于str2。

使用strcmp函数可以方便地对字符串进行大小比较,例如在排序、查找、判断字符串相等等场景中都可以得到应用。

实现及原理

// 自定义的字符串比较函数
int my_strcmp(const char* str1, const char* str2)
{
    int ret = 0;

    // 断言字符串指针不为空
    assert(str1 != NULL);
    assert(str2 != NULL);

    // 逐个字符比较,直到出现不同的字符或者到达字符串结尾
    while (*str1 == *str2)
    {
        if (*str1 == '\0')
            return 0; // 字符串相等,返回0

        str1++;
        str2++;
    }

    return *str1 - *str2; // 返回不同字符的差值
}


strcat

strcat 是 C 语言中的一个字符串操作函数,用于将一个字符串追加到另一个字符串的末尾。具体而言,strcat 函数会将源字符串的内容追加到目标字符串的末尾,并在目标字符串的末尾添加一个字符串结束符 ‘\0’。

其函数原型如下:

char* strcat(char* dest, const char* src);

该函数接受两个参数,分别是目标字符串 dest 和源字符串 src。它会将 src 的内容追加到 dest 的末尾,并返回一个指向目标字符串 dest 的指针。

需要注意的是,目标字符串 dest 必须具有足够的空间来容纳 src 的内容,以及目标字符串自身的内容。否则,可能会导致缓冲区溢出的问题。

以下是一个示例用法:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[] = " World";

    strcat(str1, str2);

    printf("%s\n", str1); // 输出连接后的字符串 "Hello World"

    return 0;
}

在这个示例中,strcat 函数将源字符串 " World" 追加到目标字符串 “Hello” 的末尾,得到一个连接后的字符串 “Hello World”。

strcat 函数的使用场景包括字符串连接、构建输出、字符串拼接等方面。但需要确保目标字符串有足够的空间来容纳源字符串的内容。为了避免缓冲区溢出,也可以使用更加安全的函数 strncat,它可以限制追加的字符个数。

实现及原理

// 自定义的字符串追加函数
char* my_strcat(char* dest, const char* src)
{
    char* ret = dest; // 保存目标字符串的起始指针

    // 断言字符串指针不为空
    assert(dest != NULL && src != NULL);

    // 指针移动到目标字符串的末尾
    while (*dest)
    {
        dest++;
    }

    // 将源字符串的内容逐个追加到目标字符串末尾
    while ((*dest++ = *src++))
    {
        // 追加字符,并判断是否复制完毕
        ;
    }

    return ret; // 返回目标字符串的起始指针
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
strlenstrcpystrcmpstrcat都是C语言中的字符串处理函数。其中strlen是用来计算字符串的长度的函数,其语法为:size_t strlen(const char *str),其中str表示需要计算长度的字符串。该函数的返回值为一个size_t类型的无符号整数,表示字符串的长度,不包括空字符('\0')。例如,若str为"hello",则strlen(str)的结果为5。 strcpy是用于将一个字符串复制到另一个字符串中的函数。其语法为:char *strcpy(char *dest, const char *src),其中dest表示目标字符串的地址,src表示需要复制的源字符串的地址。该函数会将src中的内容复制到dest中,并返回dest的值。例如,若src为"hello",dest为一个长度为10的字符数组,则执行strcpy(dest, src)后,dest数组中就存储了"hello"这个字符串。 strcmp是用于比较两个字符串是否相等的函数。其语法为:int strcmp(const char *s1, const char *s2),其中s1和s2表示需要比较的两个字符串。该函数会先比较s1和s2的第一个字符,若相同则继续比较后面的字符,直到不相等为止。返回值为一个整数,若s1>s2则返回正整数,若s1<s2则返回负整数,若s1=s2则返回0。例如,若s1为"abc",s2为"abd",则执行strcmp(s1, s2)后,返回的值为负整数。 strcat是用于将两个字符串连接起来的函数。其语法为:char *strcat(char *dest, const char *src),其中dest表示目标字符串的地址,src表示需要添加的源字符串的地址。该函数会将src中的内容添加到dest的末尾,并返回dest的值。例如,若dest为"hello",src为"world",则执行strcat(dest, src)后,dest数组中存储了"helloworld"这个字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值