剖析C语言中常见的几个字符串库函数

文章目录

  • 一、介绍strlen、strcpy、strcpy、strcmp、strstr。
  • 二、库函数的模拟实现
  • 总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、介绍典型的字符串库函数

1、求字符串长度的函数strlen

        size_t strlen( const char* str);

字符串已经'\0'作为结束标志,strlen函数返回的是

在字符串中'\0'前面出现的字符个数(不包含'\0')。

注意:参数指向的字符串必须要以'\0'结束。

           函数的返回值为size_t,是无符号。

用法示例:

#include<stdio.h>
#include<string.h>
int main()
{

	char arr[] = "ajhbduhr";
	int i = strlen(arr);
	printf("%d ", i);
}

2、字符串拷贝函数strcpy   

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

扫描二维码关注公众号,回复: 14208429 查看本文章

注:源字符串必须以'\0'结束.

       会将源字符串中的'\0'拷贝到目标空间。

        目标空间必须足够大,以确保能存放源字符串。

        目标空间必须可变。

用法示例:使用strcpy后,将arr2的内容会拷贝到arr1中

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[100] = {0};
	char arr2[] = "abc";
	strcpy(arr1,arr2);
	printf("%s ", arr1);
}

3、字符串追加函数strcat                                                                                           

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

 注:源字符串必须以'\0'结束                                                                                           

        目标空间必须足够大,以确保能存放源字符串。

用法示例:使用strcat后,arr1后面能够追加上arr2的内容、

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[100] = "duhedu";
	char arr2[] = "abc";
	strcat(arr1,arr2);
	printf("%s ", arr1);
}

4 字符串比较函数strcmp

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

标准规定:

第一个字符串大于第二个字符串,则返回大于 0 的数字;

第一个字符串等于第二个字符串,则返回 0 ;

第一个字符串大于第二个字符串,则返回小于 0 的数字。

用法示例:返回了正数1

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[100] = "duhedu";
	char arr2[] = "abc";
	int j = strcmp(arr1,arr2);
	printf("%d", j);
}

 5、字符串查找函数strstr

        char* strstr(const char* str1, const char* str2);

用途就是在一个字符串中查找子字符串。

如果找不到就返回空指针。

如果找得到就返回字符串中子字符串的起始地址。

  用法示例:返回字符串arr1。

int main()
{
	char arr1[] = "rnuvhvvr";
	char arr2[] = "rnu";
	char* j = strstr(arr1, arr2);
	if (j == NULL)
		printf("找不到");
	else
		printf("%s", j);
	return 0;
}

                                                                                         

二、字符串库函数的模拟实现

1、strlen的模拟实现。(计数器法)

#include<stdio.h>
int my_strlen(char arr[])
{
	int i = 0;
	while (arr[i] != '\0')
	{
		i++;
	}
	return i;
}
int main()
{
	char arr[] = "abcdefg";
	int i = my_strlen(arr);
	printf("%d\n", i);
	
 return 0;
}

2、strcpy的模拟实现。

char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[] = "abcdef";
	char arr2[10] = { 0 };
	my_strcmp(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

3、strcat模拟实现

char* my_strcat(char* dest, const char* src)//因为dest是要被修改的,而src是不能被修改的所以要加const.
//char* my_strcat(char* strDestination, const char* strSource)函数最后返回strDestination
{
	char* ret = dest;//保存好dest的起始位置的地址
	assert(dest && src);//assert只能判断是不是NULL,而不能判断是不是野指针。
	while (*dest)//当dest不是'\0'
	{
		dest++;
	}
	while (*dest++ = *src++)//追加world到hello的'\0'位置处
	{
		;
	}
	return ret;//
}
int main()
{
	char arr1[20] = "hello";
	char arr2[] = "world";
	my_strcat(arr1, arr2);//追加
	printf("%s\n", arr1);
	return 0;
}

4、 strcmp模拟实现

#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	if (*str1 > *str2)
		return 1;
	else
		return -1;
}
int main()
{
	char arr1[] = "rnuvhvvr";
	char arr2[] = "rnu";
	char* j = strstr(arr1, arr2);
	if (j == NULL)
		printf("找不到");
	else
		printf("%s", j);
	return 0;
}

5、 strstr模拟实现

char* my_strstr(char* str, char* substr)
{
	assert(str && substr);
	if (*substr == '\0') return str;
	const char* s1 = str;
	const char* s2 = substr;
	char* cur = str;
	while (*cur)
	{
		s1 = cur;
		s2 = substr;
		while (*s1 != '\0' && *s2 !='\0' && * s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
			return cur;
		cur++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "abcdefabcdef";
	char arr2[] = "bcd";
	char* ret = my_strstr(arr1, arr2);
	if (ret == NULL)
		printf("没找到\n");
	else
		printf("%s\n", ret);
	return 0;
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了5个字符串函数的使用方法和简单的模拟实现。

猜你喜欢

转载自blog.csdn.net/qq_62662919/article/details/122888124