指针解决所有字符串函数

这里介绍将strlen strcpy strncpy strset strnset strcat strncat strrev strlwr strupr strchr strrchr strcmp等。

这是在main函数里面实现的http://blog.csdn.net/qq_35256722/article/details/51649612

这是在函数块实现的http://blog.csdn.net/qq_35256722/article/details/51799485

下面将在指针的条件下实现

1.strlen

int my_strlen(char *p)
{
	char *tmp = p;
	while(*p != 0)
	{
		p ++;
	}
	return p-tmp;
}
int main()
{
	char s[]="weshb3de";
	printf("%d\n",my_strlen(s));
	return 0;
}

2.strcpy

void my_strcpy(char *dst,char *src)
{
	while(*src != 0)
	{
		*dst = *src;
		dst ++;
		src++;
	}
	*dst = 0;
}
int main()
{
	char s[]="d";
	char s1[100];
	my_strcpy(s1,s);
	printf("%s\n",s1);
	return 0;
}

3.strncpy

void my_strncpy(char *dst,char *src,int m)
{
	char *tmp = src;
	while(*src != 0)
	{
		if((tmp + m) <= src)
		{
			*dst = *src;
		    dst ++;
		}
		src++;
	}
	*dst = 0;
}
int main()
{
	char s[]="dedrf";
	char s1[100];
	my_strncpy(s1,s,3);
	printf("%s\n",s1);
	return 0;
}

4.strset

void my_strset(char *p,char sh)
{
	while(*p != 0)
	{
		*p =sh;
		p++;
	}
}
int main()
{
	char s[]="hello";
	char ch = '*';
	my_strset(s,ch);
	printf("%s\n",s);
	return 0;
}

5.strnset

void my_strnset(char *p,char sh,int m)
{
	char *tmp=p;
	while(*p != 0)
	{
		if((tmp + m) <= p)
		{
			*p = sh;
		}
		
		p++;
	}
}
int main()
{
	char s[]="hello";
	char ch = '*';
	my_strnset(s,ch,3);
	printf("%s\n",s);
	return 0;
}

6.strcat

void my_strcat(char *dst,char *src)
{
	while((*(dst+strlen(dst))= *src) != 0)
	{
		dst++;
		src++;
	}
}
int main ()
{
	char s[100]="wws";
	char s1[]="ess";
	my_strcat(s,s1);
	printf("%s",s);
	return 0;
}

7strncat

void my_strncat(char *dst,char *src,int m)
{
	char *tmp = src;
	while(*src != 0)
	{
		if((tmp + m )<= src)
		{
			*(dst + strlen(dst))= *src;
			dst++;
			
		}
		src++;
	}
}
int main ()
{
	char s[100]="wws";
	char s1[]="essgbb";
	my_strncat(s,s1,2);
	printf("%s",s);
	return 0;
}

8.strrev

void my_strrev(char *p,int m)
{
	char tmp ;
	char *s = (p + m-1);
	while(*p !=0)
	{
		if(p <s)
		{
			tmp = *p;
		    *p = *s;
		    *s = tmp;
			s --;
		}
		
		p ++;
		
	}
}
int main ()
{
	char s[]="abcdefghijklmnopqrst";
	int x = strlen(s);
	my_strrev(s,x);
	printf("%s",s);
	return 0;
}

9.strlwr

void my_strlwr(char *p)
{
	while(*p != 0)
	{
		if(*p >= 'A'&& *p <= 'Z')
		{
			*p = *p +32;
		}
		p ++;
	}
}
int main ()
{
	char s[]="ASXC";
	my_strlwr(s);
	printf("%s",s);
	return 0;
}
10.strupr

void my_strupr(char *p)
{
	while(*p != 0)
	{
		if(*p >= 'a'&& *p <= 'z')
		{
			*p = *p - 32;
		}
		p ++;
	}
}
int main ()
{
	char s[]="azcdx";
	my_strupr(s);
	printf("%s",s);
	return 0;
}

11.strchr

bool my_strchr(char *p,char m)
{
     while(*p != 0)
	 {
		 if(*p == m)
		 {
			 return 1;
		 }
		 p ++;
	 }
	 return 0;
}
int main()
{
	char s[]="shuhjj";
	printf("%d\n",my_strchr(s,'x'));
	return 0;
}

12.strrchr

bool my_strrchr(char *p,char m,int n)
{
	p = (p + n-1);
     while(*p != 0)
	 {
		 if(*p == m)
		 {
			 return 1;
		 }
		 p --;
	 }
	 return 0;
}
int main()
{
	char s[]="shuhjj";
	printf("%d\n",my_strrchr(s,'x',strlen(s)));
	return 0;
}

13.strcmp

int  my_strcmp(char *p,char *s)
{
	while(*p != 0 || *s != 0)
	{
		if(*p != *s)
		{
			return *p - *s;
		}
		p ++;
		s ++;
	}
	return 0;
}
int main()
{
	char s[]="shuhjr";
	char s1[]="shuhj";
	printf("%d\n",my_strcmp(s,s1));
	return 0;
}
ok!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值