日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr

發布時間:2024/4/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模擬實現字符串和內存操作函數(一)目錄:

  • strlen
  • strcpy
  • strcat
  • strcmp
  • strstr
  • strchr

strlen

size_t strlen(const char* str)

  • 字符串以‘\0’作為結束標志,strlen函數返回的是在字符串中‘\0’前面出現的字符個數(不包含’\0’)。
  • 參數指向的字符串必須要以‘\0’結束。
  • 函數的返回值為size_t,是無符號類型。
  • 因為是模擬庫函數,所以為了防止調用者放入空指針或者防止傳入的字符串被修改,下面的函數中會用到assert函數和const。
size_t my_strlen(const char* p) {size_t count = 0;assert(p != NULL);while (*p){count++;p++;}return count; }

strcpy

char* strcpy(char* dst,const char* src)

  • strcpy把含有’\0’結束符的字符串復制到另一個地址空間,返回值的類型為char*。
  • 源字符串必須以’\0’結束
  • 會將源字符串的’\0’拷貝到目標空間
  • 目標空間必須可變,并且具有足夠大的空間來存放源字符串
char* my_strcpy(char* dst, const char* src) {char* str = dst;assert(dest && src);while (*dest++ = *src++);//當指針指向位置為'\0'時結束拷貝return str; }

strcat

char* strcat(char* dst,const char* src)

  • strcat把src所指向的字符串(包括“\0”)復制到dest所指向的字符串后面。
  • 源字符串必須以’\0’結束
  • 會將源字符串的’\0’拷貝到目標空間
  • 目標空間必須可變,并且具有足夠大的空間來存放源字符串
char* my_strcat(char* dst, const char* src) {assert(dst && src);char* str = dst;while (*dst){dst++;}//找到dst的結束位置while (*dst++ = *src++);//在末尾拼接src*dst = *src;//拷貝src的'\0'return str; }

strcmp

int my_strcmp(const char* str1, const char* str2)

  • strcmp兩個字符串自左向右逐個字符相比(按ASCII值大小相比較),直到出現不同的字符或遇’\0’為止。
  • 源字符串必須以’\0’結束
  • 當str1<str2時,返回為負數,
  • 當str1=str2時,返回值= 0
  • 當str1>str2時,返回為正數
  • 需要將類型強轉為unsighed char* ,因為對比的是ASCII碼值,但是當大于127時會自動將其按照補碼的形式轉換為負數,則會產生錯誤
int my_strcmp(const char* str1, const char* str2) {unsigned char* s1 = (unsigned char* )str1;unsigned char* s2 = (unsigned char* )str2;while (*s1 && *s2){if (*s1 < *s2)return -1;else if (*s1 > *s2)return 1;else{s1++;s2++;}}if ('\0' == *s1 && '\0' == *s2)return 0;else if ('\0' == *s1)return -1;elsereturn 1;//當兩邊字符數不相同的時候進行判斷 }

strstr

char* my_strstr(const char* src, const char* sub)

  • strstr返回一個指針,指向sub在src中首次出現的位置。
char* my_strstr(const char* src, const char* sub) {assert(src && sub);const char* src1 = src;const char* sub1 = sub;while (*src1){while (*src1 == *sub1 && *sub1){src1++;sub1++;}if ('\0' == *sub1){return src;}//當*sub1指向'\0'時,說明sub1和src1完全相同,此時返回srcelse{sub1 = sub;src1 = ++src;}//如果不同,則sub1回溯,*src1繼續走向下一個位置}return NULL;}

strchr

char* strchr(char* dst,const char* src)

  • strchr返回一個指向該字符串中第一次出現的字符的指針,如果字符串中不包含該字符則返回NULL空指針。
char* my_strchr(const char* str,const char c) {assert(str);while (*str){if (*str == c)return str;elsestr++;}return NULL; }

總結

以上是生活随笔為你收集整理的C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。