strchr_strcpy_strcat的实现

strchr()函数的实现:

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


char * mystrchr(const char * pdest, char ch)
{
	char *p = NULL;
	if (pdest == NULL)
	{
		return NULL;
	}
	while (*pdest != '\0')
	{
		if (ch == *pdest)
		{
			p = pdest;
			return  p;
		}
		pdest++;
	}

	return p;
}


void main()
{
	char ch = 'a';
	char str[100] = "task";
	
	//char *p = strchr(str, ch);
	char *p = mystrchr(str, ch);

	if (p == NULL)
		printf("没有找到相应的字符。\n");
	else
	{
		printf("找到字符 %c, %s\n", *p, p);
	}
	


	system("pause");
}

strcpy()、strcat()的实现,注意参数的 传递变化:

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

/* 使用递归完成,这儿有个问题是每次递归时传值时 pdest 都有变化  */
void mystrcpy(char *pdest, char *psour)
{
	if (*psour == '\0')
	{
		return;
	}
	else
	{
		*pdest = *psour;
		//mystrcpy(pdest++, psour++); 注意这二个的写法,因为有优先级的问题,所以会导致程序出错。
		mystrcpy(++pdest, ++psour);
	}
}

/* 副本机制,改变一个变量需要,该变量的地址、改变一个指针需要一个二级指针 */
void newmystrcpynull(char **pdest, char *psour)
{
	*pdest = malloc(100);
	char *npdest = *pdest;
	while ((*npdest++) = (*psour))
	{
	}
}

/* 使用递归完成 */
void mystrcat(char *pdest, char *psour)
{
	if (*psour == '\0')
	{
		/*pdest++;
		*pdest = '\0';*/
		return;
	}
	else
	{
		//int length = sizeof(*pdest);
		while (*pdest != '\0')
			pdest++;
		*pdest = *psour;
		mystrcat(++pdest, ++psour);
	}

}

char * mystrcat(char *dest, const char *psour)
{
	char *pstart = dest;
	while (*pstart != '\0')
	{
		pstart++;
	}
	//从尾部
	while ((*pstart++) = (*psour))
	{

	}
}

void main()
{
	//char str[100] = { 0 };
	/* 如果换成下面的指针方式 看 void newmystrcatnull(char **pdest, char *psour) 的参数传递 */
	char *str = NULL;
	char str1[20] = "task";
	char str2[10] = "list";

	//strcpy(str1, str2);
	//strcat(str1, str2);

	//mystrcpy(str1, str2);
	//printf("%s\n", str1);

	newmystrcpynull(str, str2);
	printf("%s\n", str);


	//system(str1);

	system("pause");
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值