模拟实现字符串操作函数(C语言)

1、模拟实现strcat函数(字符串追加函数):

#include <stdio.h>
#include <assert.h>
char* My_strcat(char* a, char* b)
{
	assert(a);
	assert(b);
	char* q = a;
	while (*a != '\0')
	{
		a++;
	}
	while ((*a = *b))
	{
		a++;
		b++;
	}
	return q;
}//模拟strcat函数
int main()
{
    char str[50] = "hello";
	char* p = "world!";
	char* q = My_strcat(str,p);
	printf("%s\n", q);

    return 0;

}

2、模拟实现strncat函数

#include <stdio.h>
#include <assert.h>
char* My_strncat(char* a, char* b,int n)
{
	assert(a);
	assert(b);
	char* q = a;
	int cun = 0;
	while (*a)
	{
		a++;
	}
	while ((*a = *b))
	{
		a++;
		b++;
		cun++;
		if (cun == n)
		{
			*a = '\0';
			break;
		}
	}
	return q;
}//模拟实现strncat函数
int main()
{
	//模拟实现strncat函数
	char str1[50] = "nanshe";
	char* p1 = "hasan";
	char* q1 = My_strncat(str1, p1,3);
	printf("%s\n", q1);

    return 0;

}

3、模拟实现strstr函数(找子串函数)

#include <stdio.h>
#include <assert.h>
char* My_strstr(char* a, char* b)
{
	assert(a);
	assert(b);
	char* q = NULL;
	while (*a != '\0')
	{
		if (*a == *b)
		{
			q = a;//当a的内容等于b的第一个字符时候让q记录a的位置;
			break;
		}
		a++;
	}//让a走到跟b第一个字符相等的位置
	if (*a == '\0')
	{
		return NULL;
	}//若是a走完了也没有字符跟b的首字符相等则返回NULL
	while (*b != '\0')
	{
		if (*a == *b)
		{
			a++;
			b++;
		}
		else
		{
			return NULL;
		}
	}
	return q;
}//模拟实现strstr函数
int main()
{
	//模拟实现strstr函数(找字串函数)
	char* str2 = "abcdefg";
	char* p2 = "abcdee";
	char* q2 = My_strstr(str2, p2);
	if (q2 == NULL)
	{
		printf("p2不是str2的子串\n");
	}
	else
	{
		printf("p2是str2的子串:%s\n", q2);
	}
    return 0;

}

4、模拟实现strlen函数

#include <stdio.h>
#include <assert.h>
int My_strlen(const char* a)
{
	assert(a);
	int cun = 0;
	while (*a != '\0')
	{
		a++;
		cun++;
	}
	return cun;
}//模拟实现strlen函数
int main()
{
	//模拟实现strlen函数
	char* str3 = "abcdefg";
	int len = My_strlen(str3);
	printf("str3字符串的长度为:%d\n", len);
    return 0;

}

5、模拟实现strcpy函数,(要给定目标字符换的大小,用数组封装)

#include <stdio.h>
#include <assert.h>
char* My_strcpy(char* a, const char* b)
{
	assert(a);
	assert(b);
	char* q = a;
	while (*b != '\0')
	{
		if (*a == '\0')
		{
			return "cuo wu!";
			break;
		}
		*a = *b;
		a++;
		b++;
	}
	if (*b == '\0')
	{
		*a = *b;
	}
	return q;
}//模拟实现strcpy函数;
int main()
{
	//模拟实现strcpy函数,(要给定目标字符换的大小,用数组封装)
	char str4[10] = "abcdehjk";
	char* p4 = "cd";
	char* q4 = My_strcpy(str4, p4);
	printf("%s\n", str4);
    return 0;

}

6、模拟实现strncpy函数

#include <stdio.h>
#include <assert.h>
char* My_strncpy(char* a, char* b, int n)
{
	assert(a);
	assert(b);
	char* q = a;
	int cun = 0;
	while (*b != '\0')
	{
		*a = *b;
		cun++;
		a++;
		b++;
		if (cun == n)
		{
			*a = '\0';
			break;
		}
	}
	return q;
}//模拟实现strncpy函数
int main()
{
	//模拟实现strncpy函数

	char str5[10] = "world";
	char* p5 = "hasanhj";
	char* q5 = My_strncpy(str5, p5, 7);
	printf("指定数字符串拷贝成功:%s\n", q5);
    return 0;

}

7、模拟实现strcmp函数

#include <stdio.h>
#include <assert.h>
int My_strcmp(char* a, char* b)
{
	assert(a);
	assert(b);
	int cun = 0;
	while ((*a != '\0') || (*b != '\0'))
	{
		if (*a == *b)
		{
			a++;
			b++;
		}
		else if (*a > *b)
		{
			cun = 1;
			break;
		}
		else if(*a <*b)
		{
			cun = -1;
			break;
		}
	}
	return cun;
}//模拟实现strcmp函数
int main()
{
	//模拟实现strcmp函数
	char* str6 = "abcd";
	char* p6 = "abcd";
	int q6 = My_strcmp(str6, p6);
	if (q6 == 0)
	{
		printf("str6等于p6\n");
	}
	else if (q6 > 0)
	{
		printf("str6 > p6\n");
	}
	else
	{
		printf("str6 < p6\n");
	}
    return 0;

}

8、 模拟实现strncmp函数

#include <stdio.h>
#include <assert.h>

int My_strncmp(char* a, char* b, int n)
{
	assert(a);
	assert(b);
	int cun = 0;
	while (n)
	{
		if (*a == *b)
		{
			a++;
			b++;
		}
		else if (*a > *b)
		{
			cun = 1;
			break;
		}
		else if (*a < *b)
		{
			cun = -1;
			break;
		}
		n--;
	}
	return cun;
}// 模拟实现strncmp函数
int main()
{
	//模拟实现strncmp函数
	char* str7 = "abcdef";
	char* p7 = "abcdej";
	int n7 = 6;
	int q7 = My_strncmp(str7, p7, n7);
	if (q7 == 0)
	{
		printf("前 %d 位字符比较 str7 等于 p7 \n", n7);
	}
	else if (q7 > 0)
	{
		printf("前 %d 位字符比较 str7 大于 p7 \n", n7);
	}
	else if (q7 < 0)
	{
		printf("前 %d 位字符比较 str7 小于 p7 \n", n7);
	}    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值