字符串处理函数的实现

#include <string.h>

/* strcpy function */
char *(strcpy)(char *_Restrict s1, const char *_Restrict s2)
	{	/* copy char s2[] to s1[] */
	char *s;

	for (s = s1; (*s++ = *s2++) != '\0'; )
		;
	return (s1);
	}

char *(strncpy)(char *_Restrict s1, const char *_Restrict s2,
	size_t n)
	{	/* copy char s2[max n] to s1[n] */
	char *s;

	for (s = s1; 0 < n && *s2 != '\0'; --n)
		*s++ = *s2++;	/* copy at most n chars from s2[] */
	for (; 0 < n; --n)
		*s++ = '\0';
	return (s1);
	}

/* strcat function */
char *(strcat)(char *_Restrict s1, const char *_Restrict s2)
	{	/* copy char s2[] to end of s1[] */
	char *s;

	for (s = s1; *s != '\0'; ++s)
		;			/* find end of s1[] */
	for (; (*s = *s2) != '\0'; ++s, ++s2)
		;			/* copy s2[] to end */
	return (s1);
	}

/* strncat function */
char *(strncat)(char *_Restrict s1, const char *_Restrict s2, size_t n)
	{	/* copy char s2[max n] to end of s1[] */
	char *s;

	for (s = s1; *s != '\0'; ++s)
		;	/* find end of s1[] */
	for (; 0 < n && *s2 != '\0'; --n)
		*s++ = *s2++;	/* copy at most n chars from s2[] */
	*s = '\0';
	return (s1);
	}

/* strchr function */
_Const_return char *(strchr)(const char *s, int c)
	{	/* find first occurrence of c in char s[] */
	const char ch = (char)c;

	for (; *s != ch; ++s)
		if (*s == '\0')
			return (0);
	return ((char *)s);
	}

/* strcmp function */
int (strcmp)(const char *s1, const char *s2)
	{	/* compare unsigned char s1[], s2[] */
	for (; *s1 == *s2; ++s1, ++s2)
		if (*s1 == '\0')
			return (0);
	return (*(unsigned char *)s1 < *(unsigned char *)s2
		? -1 : +1);
	}


/* strncmp function */
int (strncmp)(const char *s1, const char *s2, size_t n)
	{	/* compare unsigned char s1[max n], s2[max n] */
	for (; 0 < n; ++s1, ++s2, --n)
		if (*s1 != *s2)
			return (*(unsigned char *)s1
				< *(unsigned char *)s2 ? -1 : +1);
		else if (*s1 == '\0')
			return (0);
	return (0);
	}

/* strlen function */
size_t (strlen)(const char *s)
	{	/* find length of s[] */
	const char *sc;

	for (sc = s; *sc != '\0'; ++sc)
		;
	return (sc - s);
	}

/*strlwr function */
char *strlwr( char *str )
{
	char	*p = str;
	char	c;

	for( ;; ) {
		c = *p;
		if( c == '\0' ) break;
		if( c >= 'A' && c <= 'Z' ) {
			*p = c + ('a' - 'A');
		}
		++p;
	}
	return( str );
}

/*  strupr function */
char *strupr( char *str )
{
	char	*p = str;
	char	c;

	for( ;; ) {
		c = *p;
		if( c == '\0' ) break;
		if( c >= 'a' && c <= 'z' ) {
			*p = c + ('A' - 'a');
		}
		++p;
	}
	return( str );
}

/* strstr function */
_Const_return char *(strstr)(const char *s1, const char *s2)
	{	/* find first occurrence of s2[] in s1[] */
	if (*s2 == '\0')
		return ((char *)s1);
	for (; (s1 = strchr(s1, *s2)) != 0; ++s1)
		{	/* match rest of prefix */
		const char *sc1, *sc2;

		for (sc1 = s1, sc2 = s2; ; )
			if (*++sc2 == '\0')
				return ((char *)s1);
			else if (*++sc1 != *sc2)
				break;
		}
	return (0);
	}

/*strrev function */
char *strrev( char *s )
{
	size_t	lo;
	size_t	hi;
	char	c;

	lo = 0;
	hi = strlen( s );
	if( hi != 0 ) {
		for( ;; ) {
			--hi;
			if( lo >= hi ) break;
			c = s[lo];
			s[lo] = s[hi];
			s[hi] = c;
			++lo;
		}
	}
	return( s );
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值