C语言 用指针实现字符串函数 strlen strcpy strcat strcmp

目录

一、指针模拟实现strlen()函数
                  1.strlen() 函数description

2.用指针实现且将strlen封装。

3.运行结果。

二、指针模拟实现strcpy()函数

1.strcpy() 函数description 

2.用指针实现且将strcpy封装。

3.运行结果。

三、指针模拟实现strcat()函数

1.strcat() 函数description

2.用指针实现且将strcat封装。

3.运行结果。

四、指针模拟实现strcmp()函数

1.strcmp() 函数description

2.用指针实现且将strcmp封装。

3.运行结果。


一、指针模拟实现strlen()函数

1.strlen() 函数description

 strlen() 函数计算 src 指向的字符串的长度,
                                  不包括终止空字节 ('\0')。

2.用指针实现且将strlen封装。

#include <stdio.h>
#include <string.h>

unsigned int mystrlen(const char *p);

int main(int argc, const char *argv[])
{
	char arr[128] = {0};
	//scanf("%s",arr);
	//不能用scanf输入,scanf遇到空格会停止,不会把空格及之后的字符计算进去
	gets(arr);
	int lenth = mystrlen(arr);
	printf("输入的字符串长度为%d\n",lenth);
	int sum = strlen(arr);		
	printf("输入的字符串长度为%d\n",sum);
	return 0; 
}

unsigned int mystrlen(const char *p){
	int i = 0;
	while('\0'!= *(p+i)){ //注意在这是'\0',不是'0'
		i++;
	}
	return i;
}

3.运行结果。

二、指针模拟实现strcpy()函数

1.strcpy() 函数description 

 strcpy() 函数将 src 指向的字符串,
包括终止空字节 ('\0') 复制到目标字符串,
字符串不能重叠,并且目标字符串 dest 必须足够大以接收副本。
小心缓冲超支!即数组越界。 

2.用指针实现且将strcpy封装。

#include <stdio.h>

void mystrcpy(const char *p,char *q){
	int i = 0;
	while(*(p+i)){
		*(q+i) = *(p+i);
		i++;
	}
	printf("%p\n",p);
	printf("%p\n",q);
}

int main(int argc, const char *argv[])
{
	char arr[128] = {0};
	gets(arr);
	char dest[128] = {0};
	printf("%p\n",arr);
	printf("%p\n",dest);
	mystrcpy(arr,dest);
	printf("你输入的是arr = %s\n",arr);
	printf("已经复制到dest = %s\n",dest);
	return 0;
}

3.运行结果。
 

三、指针模拟实现strcat()函数

1.strcat() 函数description

 strcat() 函数将 src 字符串附加到 dest 字符串,覆盖 dest 末尾的终止空字节('\0'),
然后添加一个终止空字节。
字符串不能重叠,dest 字符串必须有足够的空间用于结果。 
如果dest不够大,程序行为是不可预测的;
缓冲区溢出是攻击安全程序的常用途径。

2.用指针实现且将strcat封装。

#include <stdio.h>

unsigned int mystrlen(const char *p);
void mystrcat(char *dest, const char *str){
	int sum = mystrlen(dest);
	int i = 0;
	while(*(str+i)){
		*(dest+sum+i) = *(str+i);
		i++;
	}
}
int main(int argc, const char *argv[])
{
	char str[128] = {0};
	gets(str);
	char dest[128] = "hello";
	printf("你输入的字符串是 %s\n",str);
	printf("dest原来是 %s\n",dest);
	mystrcat(dest,str);
	printf("它俩拼接后是 %s\n",dest);
	
	return 0;
}
unsigned int mystrlen(const char *p){
	int i = 0;
	while(*(p+i)){
		i++;
	}
	return i;
}

3.运行结果。

四、指针模拟实现strcmp()函数

1.strcmp() 函数description

 strcmp() 函数比较两个字符串 s1 和 s2。
如果 s1,它返回一个小于、等于或大于零的整数
分别被发现小于、匹配或大于 s2。

2.用指针实现且将strcmp封装。

#include <stdio.h>
#include <stdlib.h>

int mystrcmp(const char *p,const char *q){
	for(;*p == *q;q++,p++){ 		//想复杂了,把各种情况都想到了
									//其实只用一个对一个比较就行,不用考虑字符串的长短
		if('\0' == *p)
			return 0;
	}
	return *p - *q;
}

int main(int argc, const char *argv[])
{
	char arr[128] = {0};
	char arr1[128] = {0};
	int cha = 0;
	puts("请输入你想比较的第一个字符串");
	scanf("%s",arr);
	getchar();
	puts("请输入你想比较的第二个字符串");
	scanf("%s",arr1);
	cha = mystrcmp(arr,arr1);
	if (cha > 0){
		printf("字符串1比字符串2大%d\n",cha);
	}else if (0 == cha){
		printf("字符串1和字符串2一样大\n");
	} 
	if (cha < 0){
		printf("字符串2比字符串1大%d\n",abs(cha));
	} 

	return 0;
}

3.运行结果。

  • 15
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值