0
点赞
收藏
分享

微信扫一扫

【C语言进阶】字符函数和字符串函数——strlen&&strcpy&&strcat&&strcmp函数

爱做梦的老巫婆 2022-07-12 阅读 107
c语言

字符函数和字符串函数


1.前言

2.求字符串长度

2.1.strlen

size_t strlen ( const char * str );
//typedef unsigned int     size_t;
#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "abcdef";
	size_t len = strlen(arr);
	printf("%u\n", len);//6
	return 0;
}

注:

#include <stdio.h>
int main()
{
	const char* str1 = "abcdef";
	const char* str2 = "bbb";
	if (strlen(str2) - strlen(str1) > 0)
	{
		printf("str2>str1\n");
	}
	else
	{
		printf("srt1>str2\n");
	}
	return 0;
}

在这里插入图片描述
因为strlen函数的返回值是无符号整型,无符号整型之间运算的结果还是无符号整型,即恒大于零。
故if (strlen(str2) - strlen(str1) > 0)应该改为if(strlen(str2)>strlen(str1))。

2.1.1.计算器方法模拟实现strlen函数

#include<stdio.h>
#include<assert.h>
//模拟实现strlen函数
size_t my_strlen(const char* str)
{
	assert(str);
	size_t count = 0;
	while (*str++ != '\0')
		count++;
	return count;
}
int main()
{
	char arr[] = "abcdef";
	size_t n = my_strlen(arr);
	printf("%u\n", n);
	return 0;
}

在这里插入图片描述

2.1.2.指针-指针模拟实现strlen函数

#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
	assert(str);
	char* end = str;
	while (*end++ != '\0');
	size_t n = (size_t)(end - str) - 1;
	return n;
}
int main()
{
	char arr[] = "abcde";
	size_t n = my_strlen(arr);
	printf("%u\n", n);
	return 0;
}

在这里插入图片描述

2.1.3.递归模拟实现strlen函数

#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);
}
int main()
{
	char arr[] = "abcdef";
	size_t n = my_strlen(arr);
	printf("%u\n", n);
	return 0;
}

在这里插入图片描述

3.长度不受限制的字符串函数

3.1.strcpy

char* strcpy(char * destination, const char * source );
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "abcd";
	char arr2[20] = "xxxxxxxxx";
	//arr2="abcd";//error//arr2数组是地址,地址是一个常量值,不能被赋值
	strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

在这里插入图片描述

模拟实现strcpy函数

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* str = dest;
	while (*dest++ = *src++);
	return str;
}
int main()
{
	char arr1[] = "abcdef";
	char arr2[20] = { '\0' };
	my_strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

在这里插入图片描述

3.2.strcat

char * strcat ( char * destination, const char * source );
#include<stdio.h>
#include<string.h>
int main()
{
	char arr[20] = "abcd";
	strcat(arr, arr);
	printf("%s\n", arr);
	return 0;
}

在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[20] = "hello ";
	strcat(arr, "world");
	printf("%s\n", arr);
	return 0;
}

在这里插入图片描述

模拟实现strcat函数

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* str = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *src++);
	return str;
}
int main()
{
	char arr[20] = "hello ";
	my_strcat(arr, "world");
	printf("%s\n", arr);
	return 0;
}

在这里插入图片描述

3.2.strcmp

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

strcmp比较的是两字符的ASCI码值

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "azcd";
	if (strcmp(arr1, arr2) > 0)
		printf("arr1>arr2\n");
	else
		printf("arr1<arr2\n");
	return 0;
}

在这里插入图片描述

模拟实现strcmp函数

#include<stdio.h>
#include<assert.h>
//int strcmp( const char *string1, const char *string2 );
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return (*str1 - *str2);
}
int main()
{
	char arr1[20] = { "zhangsan" };
	char arr2[] = { "zhangsanfeng" };
	//比较两字符串是否相等
	int ret = my_strcmp(arr1, arr2);
	printf("%d\n", ret);
	return;
}	

在这里插入图片描述

4.最后

那么这一次的字符函数和字符串函数的笔记就到这里啦。小沐会持续更新字符函数和字符串函数。

在这里插入图片描述

举报

相关推荐

0 条评论