乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      NO.37 ----C語(yǔ)言庫(kù)函數(shù)中字符串相關(guān)函數(shù)的模擬實(shí)現(xiàn)

       印度阿三17 2019-03-08

      #define _CRT_SECURE_NO_WARNINGS 1
      #include <stdio.h>
      #include <stdlib.h>
      #include <assert.h>
      #include <string.h>

      模擬實(shí)現(xiàn)strlen 函數(shù)(求字符串長(zhǎng)度)的實(shí)現(xiàn) 函數(shù)原型:size_t strlen(const char* str);

      int mystrlen(const char* str)
      {
      // 計(jì)數(shù)器方式
      int i = 0;
      assert(*str != NULL);       // 使用斷言操作進(jìn)行合法性檢驗(yàn)
      
      
      while (*str)
      {
      	i  ;
      	str  ;
      }
      return i;
      
      // 不允許創(chuàng)建臨時(shí)變量的計(jì)數(shù)器方式(遞歸)
      
      if (*str == '\0')
      
      	return 0;
      
      else
      	return 1   mystrlen(str   1);
      
      
      
      // 指針-指針的方式
      char* p = str;
      while (*p!='\0')
      {
      	p  ;
      }
      return p - str;
      }
      

      模擬實(shí)現(xiàn)strcpy函數(shù)(將后一個(gè)字符串的內(nèi)容拷貝到前一個(gè)字符串中),原型:char*
      strcpy(char* destination,const char* source);

      char* mystrcpy(char* dest, const char* src)
      {
      assert(dest&&src);
      // 方法一
      char* ret = dest;
      while ((*dest   = *src  ))
      {
      	;
      }
      return ret;
      
      
      // 方法二
      int i = 0;
      for (i = 0; src[i] != '\0'; i  )
      {
      	dest[i] = src[i];
      }
      dest[i] = '\0';
      return dest;
      }
      

      模擬實(shí)現(xiàn)strcat函數(shù)(字符串拼接),函數(shù)原型:char* strcat(char* destination,const char* source);

      char* mystrcat(char* dest, const char* src)
      {
      // 合法性檢驗(yàn)
      assert(dest&&src);
      
      // 方法一
      
      char* ret = dest;
      while (*dest)
      {
      	dest  ;
      }
      while ((*dest   = *src  ))
      {
      	;
      }
      return ret;
      // 找到dest的結(jié)束位置
      
      int i = 0;
      for (i = 0; dest[i] != '\0'; i  );
      
      // 將src拷貝到dest的結(jié)束位置
      
      int j = 0;
      for (j = 0; src[j] != '\0';i  , j  )
      {
      	dest[i] = src[j];
      }
      dest[i] = '\0';
      return dest;
      }
      

      模擬實(shí)現(xiàn)strstr函數(shù)(用于判斷字符串str2是否是str1的子串),
      如果是,則該函數(shù)返回str2在str1中首次出現(xiàn)的地址;否則,返回NULL。
      函數(shù)原型:char* strstr(const cahr *,const char *);

      char* my_strstr(const char *str1, const char *str2)
      {
      char *cp = (char* )str1;
      char *substr = (char *)str2;
      
      assert(str1&&str2);
      char *s1 = NULL;
      
      if (*str2 == '\0')
      {
      	return NULL;
      }
      while (*cp)
      {
      	s1 = cp;
      	substr = str2;
      	while (*s1 && *substr && (*s1 == *substr))
      	{
      		s1  ;
      		substr  ;
      	}
      	if (*substr == '\0')
      		return cp;
      	cp  ;
      }
      }
      

      模擬實(shí)現(xiàn)strchr函數(shù),原型: char *strchr(const char *str, int c) 在參數(shù) str 所指向的字符串中搜索第一次出現(xiàn)字符 c(一個(gè)無(wú)符號(hào)字符)的位置。

      char *my_strchr(const char *str, int c)
      {
      assert(str);
      while (*str && (*str != (char)c))
      {
      	str  ;
      	if ((char)c == *str)
      	{
      		return (char*)str;
      	}
      	
      	return NULL;
      }
      
      }
      

      模擬實(shí)現(xiàn)strcmp函數(shù)(比較兩個(gè)字符串的大小),函數(shù)原型:int strcmp(const char str,const char dst)

      int my_strcmp(const char *str1, const char  *str2)
      {
      
      assert(str1&&str2);
      
      while (*str1 == *str2)
      {
      	if (*str1 == '\0')
      		return 0;
      	
      }
      return *str1 - *str2;
      }
      

      模擬實(shí)現(xiàn)memcpy,函數(shù)原型:void *memcpy(void *str1, const void *str2, size_t n) 從存儲(chǔ)區(qū) str2 復(fù)制 n 個(gè)字符到存儲(chǔ)區(qū) str1

      void* my_memcpy(void* dest, void* src, size_t n)
      {
      void* ret = dest;
      char* str1 = (char*)dest;
      char* str2 = (char*)src;
      assert(dest);
      assert(src);
      while (n--)
      {
      	*str1   = *str2  ;
      }
      return ret;
      
      
      }
      

      模擬實(shí)現(xiàn)memmove函數(shù),原型: void *memmove(void *str1, const void *str2, size_t n) 從 str2 復(fù)制 n 個(gè)字符到 str1

      void *my_memmove(void *str1, const *str2, size_t n)
      {
      void *ret = str1;
      
      assert(str1&&str2);
      if (str1 <= str2 || ((char *)str1 >= (char *)str2 n))
      {
      	while (n--)
      	{
      		*(char *)str1 = *(char *)str2;
      		str1 = (char *)str1   1;
      		str2 = (char *)str2   1;
      	}
      }
      else
      {
      	str1 = (char *)str1   n - 1;
      	str2 = (char *)str2   n - 1;
      	while (n--)
      	{
      		*(char *)str1 = *(char *)str2;
      		str1 = (char *)str1 - 1;
      		str2 = (char *)str2 - 1;
      
      	}
      }
      
      return(ret);
      
      }
      

      測(cè)試代碼:

      int main()
      {	
      int i = 0;
      int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
      int arr2[10] = { 0 };
      int arr3[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
      my_memcpy(arr2, arr1, sizeof(arr1));
      my_memmove(arr3   5, arr3   4, 3 * sizeof(int));
      for (i = 0; i < 10; i  )
      {
      	printf("%d ", arr2[i]);
      }
      printf("\n");
      for (i = 0; i < 10; i  )
      {
      	printf("%d ", arr3[i]);
      }
      printf("\n");
      
      //printf("%d\n", my_strcmp(str1, str2));
      /*char *str = "hello bit ke ji";
      
      printf("%s\n", my_strchr(str,' j'));
      */
      
      /*char *str1 = "WHEN YOU HERE PEOPLE SING";
      char *str2 = "PEOPLE";
      char *pl;
      
      
      
      printf("%s\n", my_strstr(str1, str2));*/
      
      /*printf("%s\n", mystrcat(str1, str2));
      
      printf("%s\n", mystrcpy(str1, str2));
      
      printf("%d\n", mystrlen(str1));
      */
      system("pause");
      return 0;
      }
      
      來(lái)源:http://www./content-4-134601.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多