字符串函数模拟实现

来源:互联网 发布:js中有foreach in 编辑:程序博客网 时间:2024/06/09 20:48
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个字节