字符串函数模拟实现

strchr函数
函数功能:查找一个字符。在一个字符串中查找一个特定的字符。
函数原型:char *strchr(char const *str,int ch);
函数说明:strchr在字符串str中查找字符ch第一次出现的位置,找到后返回一个指向该位置的指针。如果该字符不存在于字符串中,则返回一个NULL指针。注意:第二个参数是一个整型值,但是,它包含了一个字符串值。
#include <stdio.h>
#include <windows.h>
char *mystrchr(char *s, char c)
{
	char*p = s;
	while (*s && *s != c)
		s++;
	if (*s == c)
		return s;
	return NULL;
}
int main()
{
	char buf[20] = "hellowrold!";
	char c = 'l';
	char *p = mystrchr(buf, c);
	printf("%s\n", p);
		 systme("pause");
	     return 0;
 }

strstr函数
函数功能:在一个字符串中查找一个字串
函数原型:char *strstr(char const *s1,char const *s2);
函数说明:strstr实现在s1中查找整个s2第一次出现的位置,并返回一个指向该位置的指针。如果s2并没有完整的出现在s1的任何地方,函数返回一个NULL指针。如果第二个字符串是一个空字符串,函数返回s1。
#include <stdio.h>
#include <windows.h>
char *mystrstr(char *s1, char *s2)
{
	     char *pChar;
	     pChar = s2;
	     int len = strlen(s2);
	     for (; strchr(s1, *pChar) != '\0'; s1++)
		    {
		         if (strncmp(s1, pChar, len) == 0)
			         {
			             return s1;
			         }
		   }
	   return NULL;
	 }


 int main()
 {
	     char str1[20] = "abcdhello!";
	     char str2[20] = "cd";
	     char *p = mystrstr(str1, str2);
	     printf("%s\n", p);
		 systme("pause");
	     return 0;
 }strcat

strcat函数

函数功能:将src指向的字符串追加到dest指向字符串的后面。

函数原型:  char *strcat(char *strDest, const char *strSrc)

函数说明:返回dest字符串的地址。
#include <stdio.h>  
#include <STDLIB.H>  
#include <STRING.H>  
  
char * my_strcat(char * dest,const char *src)  
{     
    char *p=dest;  
    while(*p) p++; //让指针P指向dest的最后面  
    while(*src)  
    {  
        *p=*src;  
        p++;  
        src++;  
    }  
    *p='\0';    //新字符串的终止符  
    return dest;  
}  
  
void main()  
{  
    char s[10]="andef";  
    char *c="ghi";  
    my_strcat(s,c);  
    puts(s);  
}  

strcpy函数

功能:字符串拷贝。将src指向的字符串拷贝到dest,字符串以'\0'结束。

原型:char *strcpy(char *dst, const char *src)。

说明:返回char *

char * strcpy(char *dst, const char *src)   //源字符串参数用const修饰,防止修改源字符串
{
	assert(dst != NULL && src != NULL);    //空指针检查

	char *ret = dst;  //返回目标地址

	while ((*dst++ = *src++) != '\0'); 

	return ret;
}

strcmp函数

功能:它对两个字符串进行比较,然后返回比较结果。

原型:int strcmp(const char* str1, const char* str2)

说明:其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定: str1小于str2,返回负值或者-1(VC返回-1);str1等于str2,返回0;str1大于str2,返回正值或者1(VC返回1);

int strcmp(const char* str1, const char* str2)  
{  
    int ret = 0;  
    while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)  
    {  
        str1++;  
        str2++  
    }  
  
  
    if (ret < 0)  
    {  
        return -1;  
    }  
    else if (ret > 0)  
    {  
        return 1;  
    }  
    return 0;  
}  

memcpy函数

原型:void * memcpy ( void * destination, const void * source, size_t num );

功能:拷贝n个字节

说明:返回指向dest的指针

void * mymemcpy(void *dest, const void *src, size_t count)  
{  
    if (dest == NULL || src == NULL)  
          return NULL;  
    char *pdest = static_cast <char*>(dest);  
    const char *psrc  = static_cast <const char*>(psrc);  
    int n = count;  
      
    if (pdest > psrc && pdest < psrc+count)  
    {  
        for (size_t i=n-1; i != -1; --i)  
        {  
                pdest[i] = psrc[i];  
        }  
    }  
    else  
    {  
        for (size_t i= 0; i < n; i++)  
        {  
                pdest[i] = psrc[i];  
        }  
    }  
      
    return dest;  
}  

memmove函数

功能:由src所指内存区域复制count个字节到dest所指内存区域

原型:void *memmove( void* dest, const void* src, size_tcount );

说明:返回指向dest的指针

void* memcpy(void* memTo, void* memFrom, size_t size)  
{  
    assert(memTo != NULL && memFrom != NULL);  
    char* temFrom = (char*)memFrom;  
    char* temTo = (char*)memTo;  
    while(size-- > 0)  
        *temTo++ = *temFrom++;  
    return memTo;  
} 








拷贝n个字节
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值