字符函数和字符串函数上部分

前言:

c语言中对字符和字符串的处理很是频繁,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或者常量字符数组中。

字符串常量:适用于那些对它不做修改的字符串函数。


目录

1.strlen-----计算字符串的长度

 1.1.strlen 函数的用例

1.2:strlen 的实现

2.strcpy-----字符串复制

​编辑2.1:strcpy的用例

 2.2:strcpy的实现:

3.strncpy-----从字符串中复制字符

3.1strncpy的用例

 3.2:strncpy实现

4.strcat-----字符追加

4.2:strcat的用例

4.3:strcat 的实现

5.strncat------从字符串中追加字符

5.1:strncat的用例

5.2:strncat的实现

6:strcmp-------字符比较

​编辑6.1:strcmp的用例

 ​编辑

6.2:strcmp的实现 

7.strncmp-------比较字符串的字符

7.1;strncmp的实现


1.strlen-----计算字符串的长度

 

3548283cd3f14939a508e5f04621b30a.png

 1.1.strlen 函数的用例

6b6b0fe355f3457fb830dbffa8f79385.png

 

1.2:strlen 的实现

size_t My_strlen(const char* str)
{
	size_t count = 0;
	while (*str != '\0')
	{
		str++;
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "hello word";
	int len = My_strlen(arr);
	printf("%d", len);
	return 0;
}

2.strcpy-----字符串复制

0895e1172bdf48d4a1ca1f6cc6310d9f.png2.1:strcpy的用例

 37dc39ba24234f9395935bc44e6d9978.png

注意:

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

2.目标空间必须可变。

 2.2:strcpy的实现:

char* My_strcpy(char* dest, const char* ret)
{
	char* tmp = dest;
	while (*ret != '\0')
	{
		*dest = *ret;
		dest++;
		ret++;
	}
	*dest = '\0';
	return tmp;
}
int main()
{
	char arr[10];
	char arr1[7] = "hello";
	char *tmp=My_strcpy(arr,arr1);
	printf(tmp);
	return 0;
}

有一个函数和它十分相似,但却有点不同,你知道是什么吗?


3.strncpy-----从字符串中复制字符

f9adb463209c49909c5f351154f27747.png

 1.拷贝num个字符从源字符串拷贝到目标空间;

 2,如果源字符串的长度小于num,则拷贝完源字符之后,在目标的后面追加零,知道num个字符。

3.1strncpy的用例

5f1bec2049354a47b641d47e2fec6b67.png

 3.2:strncpy实现

char* My_strncpy(char* dest, const char* ret, size_t num)
{
	char* tmp = dest;
	while (num--)
	{
		if (*ret == '\0')
		{
			*dest = '\0';
			dest++;
		}
		else
		{
			*dest = *ret;
			dest++;
			ret++;
		}
	}
	return tmp;
}
int main()
{
	char arr1[10];
	char arr[] = "hello word";
	char* tmp = My_strncpy(arr1, arr + 6, 8);
	printf(tmp);
	return 0;
}

4.strcat-----字符追加

ac621720c8084d048a9b82f83063a3d2.png

 注意:

4源字符串必须以"\0"结束

4.2:strcat的用例

f506c3dc13aa49f9b810d8e9f85aad40.png

4.3:strcat 的实现

char* My_strcat(char* dest, const char* ret)
{
	char* tmp = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*ret != '\0')
	{
		*dest = *ret;
		dest++;
		ret++;
	}
	return tmp;
}
int main()
{
	char arr[15] = "hello";
	char arr1[] = "word";
	char* tmp = My_strcat(arr, arr1);
	printf(tmp);
	return 0;
}

 但这个函数无法自己给自己追加,但接下来的一个函数,可以实现自我追加。


5.strncat------从字符串中追加字符

7feb3b76640e4284b938ea286e045489.png

 size_t num:是你要追加的字符个数,size_t是无符号整形

5.1:strncat的用例

1886ae2affa84a25a15ad0ef0a4e6987.png

 

 

5.2:strncat的实现

char* My_strncat(char* dest, const char* ret,size_t num)
{
	char* tmp = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (num--)
	{
		*dest = *ret;
		dest++;
		ret++;
	}
*dest='\0';
	return tmp;
}
int main()
{
	char arr[20] = "hello word";
	char* tmp = My_strncat(arr, arr, 5);
	printf(tmp);
	return 0;
}

6:strcmp-------字符比较

636034c5d0ac420295cc8c0e27f5b83b.png6.1:strcmp的用例

 38c1a5d2684c4df78dccb5e27c3badba.png

6.2:strcmp的实现 

int My_strcmp(const char* dest, const char* ret)
{
	int flag= 0;
	assert(dest);
	assert(ret);
	while (!(flag = *(unsigned char*)dest - *(unsigned char*)ret) && *ret)
	{
		ret++;
		dest++;
	}
	if (flag < 0)
	{
	    flag = -1;
	}
	else if (flag > 0)
	{
		flag = 1;
	}
	else
	{
		flag=0;
	}
	return flag;
}
int main()
{
	char arr[] = "abcd";// a=97 b=98 c=99  d=100(ASCILL值)
	char arr1[] = "abdc";//a=97.b=98.d=100 c=99
	int flag = My_strcmp(arr, arr1);
	if (flag > 0)
	{
		printf(">\n");
	}
	else if (flag == 0)
	{
		printf("==\n");
	}
	else
	{
		printf("<\n");
	}
	return 0;
}

有一个函数跟这个函数十分相似,让我们接下来看一看。


7.strncmp-------比较字符串的字符

7103e4800493435e96af8262834060d7.png

7.1;strncmp的实现

int My_strncmp(const char* dest, const char* ret,size_t num)
{
	int flag= 0;
	assert(dest);
	assert(ret);
	while (num&&flag==0)
	{
		flag = *(unsigned char*)dest - *(unsigned char*)ret;
		dest++;
		ret++;
		num--;

	}
		if (flag < 0)
		{
			flag = -1;
		}
		else if (flag > 0)
		{
			flag = 1;
		}
		else
		{
			flag = 0;
	}
	return flag;
}
int main()
{
	char arr[] = "abcd";// a=97 b=98 c=99  d=100(ASCILL值)
	char arr1[] = "abdc";//a=97.b=98.d=100 c=99
	int flag = My_strncmp(arr, arr1,3);
	if (flag > 0)
	{
		printf(">\n");
	}
	else if (flag == 0)
	{
		printf("==\n");
	}
	else
	{
		printf("<\n");
	}
	return 0;
}

 

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值