C语言字符串函数详解

C语言相关字符串函数的使用和模拟实现

目录

首先我们现在菜鸟教程中看一下字符串函数有哪些。

strlen的作用和模拟实现

strlen函数的使用

模拟实现strlen

计数器方法

递归方法

 指针减去指针的方法

 strcpy的使用和模拟实现

strcpy的使用

 strcpy的模拟实现

 strcat的使用和模拟实现

 strcat的使用

 strcat的模拟使用

strcmp的使用和模拟实现

strcmp的使用 

 strcmp的模拟实现

 strncpy的使用和模拟实现

strncpy的使用

 strncpy的模拟实现

 strncat的使用和模拟实现

 strncat的使用

 strncat的模拟实现

 strncmp的使用和模拟实现

strncmp的使用

 strncmp的模拟实现

 strstr的使用和模拟实现

strstr的使用

strstr的模拟实现

 


首先我们现在菜鸟教程中看一下字符串函数有哪些。

strlen的作用和模拟实现

 size_t strlen ( const char * str );

 size_t代表无符号整数

strlen函数的使用

#include <stdio.h>
int main()
{
	char arr[100] = "woshi shuaige";//13
	int ret=strlen(arr);
	printf("%d\n", ret);
	return 0;
}

 

模拟实现strlen

计数器方法

int mystrlen(const char* des)
{
	int count = 0;
	while (*des)
	{
		count++;
		des++;
	}
	return count;
}

递归方法

int mystrlen(const char* des)
{
	if (*des == '\0')
		return 0;
	else
		return 1 + mystrlen(des + 1);
}

 指针减去指针的方法

int mystrlen(char* des)
{
	char* str = des;
	while (*str)
	{
		str++;
	}
	return str - des;
}

 strcpy的使用和模拟实现

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

strcpy的使用

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = { 0 };
	char arr2[50] = "woshi shuaige";
	strcpy(arr, arr2);
	printf("%s\n", arr);
	return 0;
}

 

 strcpy的模拟实现

#include <stdio.h>
#include <assert.h>
char* mystrcpy(char* destination, const char* source)
{
	char* ret = destination;
	assert(destination, source);
	while (*destination++ = *source++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr[100] = { 0 };
	char arr2[50] = "woshi shuaige";
	mystrcpy(arr, arr2);
	printf("%s\n", arr);
	return 0;
}

 strcat的使用和模拟实现

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

 strcat的使用

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = "woshi";
	char arr2[50] = " shuaige";
	strcat(arr, arr2);
	printf("%s\n", arr);
	return 0;
}

 strcat的模拟使用

#include <stdio.h>
char* mystrcat(char* destination, const char* source)
{
	char* ret = destination;
	while (*destination)
	{
		destination++;
	}
	while (*destination++ = *source++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr[100] = "woshi";
	char arr2[50] = " shuaige";
	mystrcat(arr, arr2);
	printf("%s\n", arr);
	return 0;
}

 

strcmp的使用和模拟实现

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

strcmp的使用 

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = "woshishuaige";//我是帅哥
	char arr2[50] = "woshishuaibi";//我是帅比
	int ret=strcmp(arr, arr2);
	printf("%d\n", ret);
	return 0;
}

 

 strcmp的模拟实现

#include <stdio.h>
int mystrcmp(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 arr[100] = "woshishuaige";//我是帅哥
	char arr2[50] = "woshishuaibi";//我是帅比
	int ret=mystrcmp(arr, arr2);
	printf("%d\n", ret);
	return 0;
}

 strncpy的使用和模拟实现

 char * strncpy ( char * destination, const char * source, size_t num );

strncpy的使用

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = { 0 };
	char arr2[50] = "woshi shuaige";
	strncpy(arr, arr2, 7);
	printf("%s\n", arr);
	return 0;
}

 strncpy的模拟实现

#include <stdio.h>
#include <assert.h>
char* mystrncpy(char* destination, const char* source, size_t num)
{
	assert(destination, source);
	int i = 0;
	for (i = 0; i < num && source[i]; i++)
	{
		destination[i] = source[i];
	}
	if (i < num)
	{
		destination[i] = 0;
	}
	return destination;
}
int main()
{
	char arr[100] = { 0 };
	char arr2[50] = "woshi shuaige";
	mystrncpy(arr, arr2, 7);
	printf("%s\n", arr);
	return 0;
}

 

 strncat的使用和模拟实现

char * strncat ( char * destination, const char * source, size_t num );

 strncat的使用

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = "woshi";
	char arr2[50] = " shuai ge";
	strncat(arr, arr2, 8);
	printf("%s\n", arr);
	return 0;
}

 strncat的模拟实现

#include <stdio.h>
#include <assert.h>
char* mystrncat(char* destination, const char* source, size_t num)
{
	assert(destination, source);
	char* ret = destination;
	while (*destination)
	{
		destination++;
	}
	int i = 0;
	for (i = 0; i < num && source[i]; i++)
	{
		destination[i] = source[i];
	}
	
	destination[i] = 0;
	
	return ret;
}
int main()
{
	char arr[100] = "woshi";
	char arr2[50] = " shuai ge";
	mystrncat(arr, arr2, 8);
	printf("%s\n", arr);
	return 0;
}

 strncmp的使用和模拟实现

 

 int strncmp ( const char * str1, const char * str2, size_t num );

strncmp的使用

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = "woshishuaige";//我是帅哥
	char arr2[50] = "woshishuaibi";//我是帅比
	int ret=strncmp(arr, arr2, 11);
	printf("%d\n", ret);
	return 0;
}

 strncmp的模拟实现

#include <stdio.h>
#include <assert.h>
int mystrncmp(const char* str1, const char* str2, size_t num)
{
	assert(str1, str2);
	while (*str1&&*str2&&num)
	{
		if (*str1 > *str2)
			return 1;
		if (*str1 < *str2)
			return -1;
		
		num--;
		str1++;
		str2++;
	}
	return 0;
}
int main()
{
	char arr[100] = "woshishuaige";//我是帅哥
	char arr2[50] = "woshishuaibi";//我是帅比
	int ret=mystrncmp(arr, arr2, 11);
	printf("%d\n", ret);
	return 0;
}

 strstr的使用和模拟实现

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

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

strstr的使用

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = "wo shi yi ge shuaibi";
	char* p;
	p = strstr(arr, "ge");
	printf("%s\n", p);
	return 0;
}

 

strstr的模拟实现

#include <stdio.h>
#include <assert.h>
char* mystrstr(const char* str1, const char* str2)
{
	const char* cp = str1;
	char* s1=NULL;
	char* s2 = NULL;
	assert(str1,str2);
	if (*str2 == 0)
		return (char*)str1;
	while (*cp)
	{
		s1 = (char*)cp;
		s2 = (char*)str2;
		while (*s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)cp;
		}
		cp++;
	}
	return NULL;
}

int main()
{
	char arr[100] = "wo shi yi ge shuaibi";
	char* p;
	p=mystrstr(arr, "ge");
	printf("%s\n",p);
	return 0;
}

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值