最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言字符函數(shù)、內(nèi)存函數(shù)功能及實現(xiàn)代碼

 更新時間:2021年02月07日 08:40:39   作者:Skyline-sjc  
這篇文章主要介紹了C語言字符函數(shù)、內(nèi)存函數(shù) 功能及實現(xiàn),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

C語言字符函數(shù)、內(nèi)存函數(shù) 功能及實現(xiàn) strlen函數(shù)(求字符串長度)注意點模擬實現(xiàn) strcpy函數(shù)(字符串拷貝函數(shù))注意點模擬實現(xiàn) strcat函數(shù)(字符串銜接函數(shù))注意點模擬實現(xiàn) strcmp函數(shù)注意點模擬實現(xiàn) strstr函數(shù)模擬實現(xiàn) strtok函數(shù)使用 strerror函數(shù)使用 memcpy函數(shù)注意點模擬實現(xiàn) memmove函數(shù)注意點模擬實現(xiàn) memset函數(shù)注意點

strlen函數(shù)(求字符串長度)

統(tǒng)計字符串長度直到\0為止

注意點

1、屬于<string.h>庫
2、參數(shù)為字符串,返回類型為無符號整型,特別注意下圖
此圖運行結(jié)果為>,因為無符號整型加減必為大于0的數(shù),所以此類比較需要避免
3、結(jié)束標志為\0

在這里插入圖片描述

模擬實現(xiàn)

int my_strlen(const char *str){
  assert(str);
  if(*str=='\0'){
    return 0;
  }
  return 1 + my_strlen(str + 1);//采用遞歸方式
}

strcpy函數(shù)(字符串拷貝函數(shù))

將sorc數(shù)組內(nèi)第一個\0前(包括\0)的所有內(nèi)容拷貝到dest數(shù)組。

注意點

1、dest數(shù)組需要足夠容納source數(shù)組
2、source數(shù)組一定要有\(zhòng)0作為中止標識
3、dest數(shù)組要可以更改
4、\0會被拷入

模擬實現(xiàn)

char *my_strcpy(char *dest,const char *sorc)
{
  assert(dest && sorc);
  char *ret = dest;
  while (*dest++ = *sorc++)//當/0被最后一次拷入時,跳出循環(huán)
  {
    ;
  }
  return ret;
}

strcat函數(shù)(字符串銜接函數(shù))

從dest數(shù)組的第一個\0開始將sorc函數(shù)內(nèi)第一個\0前的全部內(nèi)容拷貝,dest函數(shù)的第一個\0會被覆蓋,sorc函數(shù)的\0會被拷入。

注意點

1、dest數(shù)組要足夠容納自身和source數(shù)組
2、dest數(shù)組必須空間可修改
3、dest、source數(shù)組都有\(zhòng)0
4、不可以自己拷貝自己,因為沒有中止條件

模擬實現(xiàn)

char *my_strcat(char *dest, const char *sorc)
{
  char *ret = dest;
  while (*dest != '\0')
  {
    dest++;
  }
  while (*dest++ = *sorc++)
  {
    ;
  }
  return ret;
}

strcmp函數(shù)

比較兩個字符串,逐位比較,若對應(yīng)位不相同則返回ASCII碼相減的值,若每一位相同(即整個字符串相同)返回0。

注意點

1、比較的不是長度,而是對應(yīng)位置的ASCII碼值

模擬實現(xiàn)

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

strstr函數(shù)

在母串中尋找子串,若找到則返回母串中子串的首地址,若沒找的則返回空指針

模擬實現(xiàn)

此處使用暴力方法求解,KMP算法可提供更優(yōu)解

char *my_strstr(char *mum, char *child)
{
  assert(mum && child);
  const char *pc = mum;
  while (*pc)
  {
    const char *p1 = pc;
    const char *p2 = child;
    while (*p1 == *p2 && *p1 && *p2)
    {
      p1++;
      p2++;
    }
    if (*p2 == '\0')
    {
      return (char *)pc;
    }
    pc++;
  }
  return NULL;
}

strtok函數(shù)

1、兩個參數(shù)(arr源字符串,sep符號字符串(切割標志))
2、希望得到第二個字符串時候需要傳入空指針

在這里插入圖片描述

使用

int main()
{
  char arr[]="skyline&csdn.com";
  char arr2[30]={0};//因為strtok函數(shù)會修改源數(shù)組,通常復(fù)制后處理
  char sep[]="&.";
  strcpy(arr2,arr);
  printf("%s\n",strtok(arr2,sep));
  printf("%s\n",strtok(NULL,sep));
  printf("%s\n",strtok(NULL,sep));
  return 0;
}

結(jié)果:

在這里插入圖片描述

strerror函數(shù)

生成不同的錯誤報警

在這里插入圖片描述

使用

int main()
{
  prinf("%s\n",strerror(errno));//根據(jù)程序出現(xiàn)的問題輸出報錯字符串
}

memcpy函數(shù)

一個字節(jié)一個字節(jié)的拷貝,共拷貝count個字節(jié);

注意點

1、此函數(shù)要對兩個不相關(guān)的內(nèi)存塊(若相同由于算法限制無法)比如

int main()
{
  int num1[6] = {1, 2, 3, 4, 5, 6};
  my_memcpy(num1+2, num1, 16);//希望得到121234
                //實際得到121212
  for (int i = 0; i < 6;i++){
    printf("%d", num1[i]);
  }
  return 0;
}

模擬實現(xiàn)

void my_memcpy(void *dest, void *src, size_t count){
  assert(dest && src);
  while (count--)
    {
      *(((char *)dest)) = *(((char *)src));
      dest=(char*)dest+1;//最好不要寫成++(char*)dest,gcc編譯器認為(char*)dest不可作為左值
      src=(char*)src+1;
    }
}

memmove函數(shù)

注意點

1、可以接受上文出現(xiàn)的相關(guān)內(nèi)存

模擬實現(xiàn)

void my_memmove(void *dest, void *src, size_t count)
{
  assert(dest && src);
  if (dest > src)//當目標位置在源位置前,我們要從后向前拷貝
  {
    while (count--)
    {
      *(((char *)dest) + count) = *(((char *)src) + count);
    }
  }
  else
  {
    while (count--)//)//當目標位置在源位置后,我們要從前向后拷貝
    {
      *(((char *)dest)) = *(((char *)src));
      dest=(char*)dest+1;
      src=(char*)src+1;
    }
  }
}

memset函數(shù)

將一個個字節(jié)設(shè)置為某個值,共設(shè)置count個字節(jié)

注意點

1、以字節(jié)為單位設(shè)置的,如果int num[10]={0},memset(num,1,40),并不能使得數(shù)組全為1,因為int數(shù)組中一個元素為4個字節(jié)實際是,每個元素變成01 01 01 01,所以這是錯誤的

到此這篇關(guān)于C語言字符函數(shù)、內(nèi)存函數(shù) 功能及實現(xiàn)的文章就介紹到這了,更多相關(guān)C語言字符函數(shù)、內(nèi)存函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c語言動態(tài)數(shù)組示例

    c語言動態(tài)數(shù)組示例

    這是一個簡單的動態(tài)分配數(shù)組大小的例子,需要的朋友可以參考下
    2014-04-04
  • c++利用vector創(chuàng)建二維數(shù)組的幾種方法總結(jié)

    c++利用vector創(chuàng)建二維數(shù)組的幾種方法總結(jié)

    這篇文章主要介紹了c++利用vector創(chuàng)建二維數(shù)組的幾種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言算法學(xué)習(xí)之雙向鏈表詳解

    C語言算法學(xué)習(xí)之雙向鏈表詳解

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向直接后繼和直接前驅(qū)。本文主要介紹了C語言算法中雙向鏈表的實現(xiàn),需要的可以參考一下
    2022-05-05
  • C語言自定義函數(shù)的實現(xiàn)

    C語言自定義函數(shù)的實現(xiàn)

    這篇文章主要介紹了C語言自定義函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語言實現(xiàn)字符串轉(zhuǎn)浮點函數(shù)的示例

    C語言實現(xiàn)字符串轉(zhuǎn)浮點函數(shù)的示例

    字符串不僅可以轉(zhuǎn)換為整數(shù),也可以轉(zhuǎn)換為浮點數(shù),本文主要介紹了C語言實現(xiàn)字符串轉(zhuǎn)浮點函數(shù)的示例,具有一定的參考價值,感興趣的可以了解一下
    2022-02-02
  • 哈希表實驗C語言版實現(xiàn)

    哈希表實驗C語言版實現(xiàn)

    以下是對哈希表實驗用C語言實現(xiàn)的代碼進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • 基于C語言實現(xiàn)UDP服務(wù)器

    基于C語言實現(xiàn)UDP服務(wù)器

    這篇文章主要為大家詳細介紹了如何使用C語言編寫一個簡單的UDP服務(wù)器程序,以及如何接收和處理客戶端發(fā)送的數(shù)據(jù),有需要的小伙伴可以了解下
    2024-10-10
  • 利用C++和QT實現(xiàn)Log自定義日志系統(tǒng)

    利用C++和QT實現(xiàn)Log自定義日志系統(tǒng)

    這篇文章主要為大家詳細介紹了如何利用C++和QT實現(xiàn)Log自定義日志系統(tǒng),文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2023-12-12
  • C/C++中宏/Macro的深入講解

    C/C++中宏/Macro的深入講解

    這篇文章主要給大家介紹了關(guān)于C/C++中宏/Macro的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C/C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C語言制作簡易金山打字通功能的代碼

    C語言制作簡易金山打字通功能的代碼

    今天小編就為大家分享一篇關(guān)于C語言制作簡易金山打字通功能的代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論

长治市| 松溪县| 聂拉木县| 张家川| 望谟县| 白朗县| 五台县| 曲阳县| 滨海县| 上虞市| 正定县| 太和县| 青岛市| 镶黄旗| 吴堡县| 武定县| 南部县| 大丰市| 家居| 班戈县| 永清县| 延庆县| 灵山县| 杂多县| 青海省| 思茅市| 洪江市| 龙泉市| 酉阳| 友谊县| 嘉黎县| 鄂伦春自治旗| 湾仔区| 乃东县| 固阳县| 荔波县| 吉安县| 广元市| 富锦市| 周口市| 微博|