strcat函数与strcmp函数(模拟实现)

本文深入解析了strcat和strcmp函数的使用方法与实现原理,包括如何拼接字符串和比较字符串大小,提供了详细的代码示例和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

strcat函数相当于一个拼接的功能
例如如下代码:

    char str1[100] = "sing dance ";
	char str2[100] = "rap basketball";
	strcat(str1, str2);
	puts(str1);

在这里插入图片描述
这里需要注意几点

  • Appends a copy of the source string to the destination string. The terminating null character in
    destination is overwritten by the first character of source, and a null-character is included at the end of the new string formed by the concatenation of both in destination.
  • 源字符串必须以 ‘\0’ 结束。
  • 目标空间必须有足够的大,能容纳下源字符串的内容。
  • 目标空间必须可修改。

模拟实现strcat函数

char* my_strcat(char* dest, const char* src){
	assert(dest != NULL&&src != NULL);
	char* p = dest;
	//先找到dest的末尾
	while (*p != '\0'){
		p++;
	}
	//循环结束,p已经指向\0的位置
	//2,开始拷贝
	while (*src != '\0'){
		*p = *src;
		p++;
		src++;
	}
	// \0也需要拷贝
	*p = '\0';
	return dest;
}

strcmp函数:比较两个字符串大小

	char str1[100] = "sing dance ";
	char str2[100] = "rap basketball";

	int ret = strcmp(str1, str2);
	if (ret == 0){
		printf("str1=str2");
	}
	else if (ret < 0)
		printf("str1<str2");
	else
		printf("str1>str2");

在这里插入图片描述

int strcmp ( const char * str1, const char * str2 );
  • 标准规定:
    第一个字符串大于第二个字符串,则返回大于0的数字
    第一个字符串等于第二个字符串,则返回0
    第一个字符串小于第二个字符串,则返回小于0的数字

判断字符串的大小用字典序来判断

函数实现strcmp

int my_strcmp(const char* str1, const char* str2){
	assert(str1 != NULL&&str2 != NULL);
	while (*str1 != '\0'&&*str2 != '\0'){
		if (*str1 < *str2){
			return -1;
		}
		else if (*str1>*str2){
			return 1;
		}
		else{
			str1++;
			str2++;
		}
	}
	//循环结束,必有一个数组已经遍历了一遍,并且此时这个数组指向'\0'的位置
	//这两个字符串在一定长度相等,但仍需进行进一步判断
	if (*str1 < *str2){
		//str1指向‘\0'
		return -1;
	}
	else if (*str1>*str2){
	   //str2指向‘\0'
		return 1;
	}
	else{
	//两个数组都指向‘\0’
		return 0;
	}
}

int main(){
	char str1[] = "sing dance";
	char str2[] = "rap basketball";
	int ret = my_strcmp(str1, str2);
	if (ret == 0){
		printf("str1=str2");
	}
	else if (ret < 0){
		printf("str1<str2");
	}
	else
		printf("str1>str2");

	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值