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

C語(yǔ)言實(shí)現(xiàn)字符串操作函數(shù)的實(shí)例

 更新時(shí)間:2017年08月11日 17:00:28   投稿:lqh  
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)字符串操作函數(shù)的實(shí)例的相關(guān)資料,開(kāi)發(fā)程序的時(shí)候經(jīng)常使用到一些字符串函數(shù),例如求字符串長(zhǎng)度,拷貝字符串……,需要的朋友可以參考下

C語(yǔ)言實(shí)現(xiàn)字符串操作函數(shù)的實(shí)例

在編寫(xiě)程序的過(guò)程中,我們經(jīng)常使用到一些字符串函數(shù),例如求字符串長(zhǎng)度,拷貝字符串……,這些函數(shù)都在C標(biāo)準(zhǔn)庫(kù)中存在,我們可以直接使用。但我們還需要掌握這些函數(shù)的實(shí)現(xiàn)方法,今天來(lái)看看一些常用的字符串操作函數(shù)的實(shí)現(xiàn)方法。

1.strlen

strlen是用來(lái)求字符串長(zhǎng)度的函數(shù),字符串長(zhǎng)度就是它所包含的字符個(gè)數(shù)。

今天給大家介紹三種實(shí)現(xiàn)strlen函數(shù)的方法

(1)定義一個(gè)計(jì)數(shù)器count

//方式一:定義一個(gè)計(jì)數(shù)器
size_t my_strlen(const char *str)
{
  int count = 0;   
  while (*str)
  {
    count++;     
    str++;
  }
  return count;
}

(2)遞歸實(shí)現(xiàn)

size_t my_strlen(const char *str)
{
  if (*str == '\0')
    return 0;
  else
    return my_strlen(str + 1) + 1;
}

(3)利用指針-指針

size_t my_strlen(const char *str)
{
  const char *end = str;
  while (*end++)
  {
    ;
  }
  return end - str - 1;
}

2.strcpy

用于復(fù)制字符串的函數(shù)是strcpy,它的原型如下:

char *strcpy(char *dest, const char *src);

使用這個(gè)函數(shù)時(shí),要注意幾點(diǎn)

(1)、目標(biāo)字符數(shù)組的空間必須足夠大,足以容納需要復(fù)制的字符串
(2)、目標(biāo)字符數(shù)組要可以被修改
(3)、被復(fù)制的字符串要可以找到'\0'

char *my_strcpy(char *dest, const char *src)
{
  char *tmp = dest;
  assert(dest);
  assert(src);
  while (*dest++ = *src++)
  {
    ;
  }
  return tmp;
}

3.strcat

strcat函數(shù)是可以把一個(gè)字符串添加(連接)到另一個(gè)字符串的后面。strcat函數(shù)要求dest參數(shù)原先已經(jīng)包含了一個(gè)字符串(可以是空字符串)。它找到這個(gè)字符串的末尾,并把src字符串的一份拷貝添加到這個(gè)位置。

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

4.strcmp

strcmp用于比較兩個(gè)字符串,及對(duì)兩個(gè)字符串對(duì)應(yīng)的字符逐個(gè)進(jìn)行比較,直到發(fā)現(xiàn)不匹配。那個(gè)最先不匹配的字符中較“小”的那個(gè)字符所在的字符串被認(rèn)為“小于”另外一個(gè)字符串。如果其中一個(gè)字符串是另外一個(gè)字符串的前面一部分,那么它也被認(rèn)為“小于”另外一個(gè)字符串,因?yàn)樗?\0'出現(xiàn)的更早。需要注意的是,strcmp函數(shù)對(duì)于只包含大寫(xiě)字母或只包含小寫(xiě)字母的字符串比較。

int my_strcmp(const char *src1, const char *src2)
{
  while (*src1 == *src2)
  {
    if (*src1 == '\0')
      return 0;
    src1++;
    src2++;
  }
  return *src1 - *src2;
}

5.strstr

為了在一個(gè)字符串中查找一個(gè)子串,可以使用strstr函數(shù),該函數(shù)實(shí)在s1中查找整個(gè)s2第1次出現(xiàn)的起始位置,并返回一個(gè)指向該位置的指針。如果s2并沒(méi)有出現(xiàn)在s1的任何地方,函數(shù)將返回一個(gè)NULL指針。如果第二個(gè)函數(shù)是一個(gè)空字符串,函數(shù)就返回s1。

char *my_strstr(const char* s1, const char* s2)
{
  const char *p = s1;
  const char *q = s2;
  const char *cur = NULL;
  assert(s1);
  assert(s2);
  if (*s2 == '\0')
    return s1;
  while (*p)
  {
    cur = p;
    while ((*p) && (*q) && (*p == *q))
    {
      p++;
      q++;
    }
    if (*q == '\0')
      return cur;
    p = cur + 1;
    q = s2;
  }
  return NULL;
}

6.strchr

strchr是用來(lái)查找一個(gè)特定的字符,在字符串str中查找字符ch第一次出現(xiàn)的位置,找到后函數(shù)返回一個(gè)指向該位置的指針。如果該字符并不存在于字符串中,函數(shù)就返回一個(gè)NULL指針。

char *my_strchr(char const *str, int ch)
{
  const char *tmp = str;
  while (*tmp)
  {
    if (*tmp == ch)
    {
      return tmp;
    }
    tmp++;
  }
  return NULL;
}

7.strrchr

與strchr類(lèi)似的查找函數(shù)還有一個(gè)是strrchr,它和strchr的不同之處在于,該函數(shù)返回的是一個(gè)指向字符串中該字符最后一次出現(xiàn)的位置

char* my_strrchr(const char* str, int ch)
{
  char* pos = 0;
  assert(str);
  while (*str)
  {
    if (*str == ch)
    {
      pos = str;
    }
    str++;
  }
  if (pos != 0)
  {
    return pos;
  }
  else
    return NULL;
}

長(zhǎng)度受限制的字符串函數(shù)

標(biāo)準(zhǔn)庫(kù)中還包含一些函數(shù),它們以一種不同的方式去處理字符串。這些函數(shù)接受一個(gè)顯示的長(zhǎng)度參數(shù),用于限定進(jìn)行復(fù)制或比較的字符數(shù)。

1.strncpy

和strcpy一樣,strncpy把源字符串的字符復(fù)制到目標(biāo)空間,但是,它總是正好向dest中拷貝len個(gè)字符,如果strlen(src)的值小于len,dest數(shù)組就用額外的'\0'填充到len字節(jié)長(zhǎng)度。如果strlen(src)的值大于或等于len,那么只有l(wèi)en個(gè)字符被復(fù)制到dest中。

char *my_strncpy(char *dest, const char *src, size_t len)
{
  char *ret = dest;
  size_t i = 0;
  assert(dest);
  assert(src);
  while (len--)
  {
    *ret++ = *src++;
  }
  if (*(ret) != '\0')
  {
    *ret = '\0';
  }
  return dest;
}

2.strncat

strncat,它從src中最多復(fù)制len個(gè)字符到目標(biāo)數(shù)組的后面。

char *my_strncat(char *dst, const char *src, size_t len)
{
  char *ret = dst;
  assert(dst);
  assert(src);
  while (*dst != '\0')
  {
    dst++;
  }
  while (len--)
  {
    *dst = *src;
    dst++;
    src++;
  }
  return ret;
}

3.strncmp

strncmp也用于比較兩個(gè)字符串,但它最多比較len個(gè)字節(jié)。如果兩個(gè)字符串在第len個(gè)字符之前存在不相等的字符,這個(gè)函數(shù)就像strcmp一樣停止比較,返回結(jié)果。如果兩個(gè)字符串的前l(fā)en個(gè)字符相等,函數(shù)就返回零。

int my_strncmp(char const *s1, char const *s2, size_t len)
{
  assert(s1);
  assert(s2);
  while (len--)
  {
      if (*s1 == *s2)
      {
        s1++;
        s2++;
      }
      else
      {
        return *s1 - *s2;
      }
  }
    return 0;
}

標(biāo)準(zhǔn)庫(kù)里的字符串函數(shù)還有很多,今天就先介紹到這里。

以上就是C語(yǔ)言字符串的操作總結(jié) ,如有疑問(wèn),請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++ VTK實(shí)例之高斯隨機(jī)數(shù)的生成

    C++ VTK實(shí)例之高斯隨機(jī)數(shù)的生成

    這篇文章主要介紹了VTK的一個(gè)實(shí)例之高斯隨機(jī)數(shù)的生成,本文演示了從一個(gè)平均數(shù)是0.0和標(biāo)準(zhǔn)偏差是2.2的高斯分布中隨機(jī)生成3個(gè)隨機(jī)數(shù)。感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-11-11
  • c++primer類(lèi)詳解

    c++primer類(lèi)詳解

    今天小編就為大家分享一篇關(guān)于C++Primer中變量和基本類(lèi)型的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-09-09
  • 深入C++中struct與class的區(qū)別分析

    深入C++中struct與class的區(qū)別分析

    本篇文章是對(duì)C++中struct與class的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言實(shí)現(xiàn)冒泡排序算法的示例詳解

    C語(yǔ)言實(shí)現(xiàn)冒泡排序算法的示例詳解

    這篇文章主要介紹了C語(yǔ)言如何實(shí)現(xiàn)冒泡排序算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C++回調(diào)函數(shù)的理解和使用教程

    C++回調(diào)函數(shù)的理解和使用教程

    這篇文章主要給大家介紹了關(guān)于C++回調(diào)函數(shù)的理解和使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C語(yǔ)言算法練習(xí)之抓交通肇事犯

    C語(yǔ)言算法練習(xí)之抓交通肇事犯

    這篇文章主要該大家分享C語(yǔ)言算法抓交通肇事犯的練習(xí),文章主要通過(guò)描述抓交通肇事犯得問(wèn)題然后確定程序框架將結(jié)果運(yùn)算出來(lái),下面來(lái)看詳細(xì)內(nèi)容吧,需要的朋友可以參考一下
    2022-03-03
  • OpenCV使用GrabCut實(shí)現(xiàn)摳圖功能

    OpenCV使用GrabCut實(shí)現(xiàn)摳圖功能

    Grabcut是基于圖割(graph cut)實(shí)現(xiàn)的圖像分割算法,它需要用戶輸入一個(gè)bounding box作為分割目標(biāo)位置,實(shí)現(xiàn)對(duì)目標(biāo)與背景的分離/分割。本文將使用GrabCut實(shí)現(xiàn)摳圖功能,需要的可以參考一下
    2023-02-02
  • 基于稀疏圖上的Johnson算法的詳解

    基于稀疏圖上的Johnson算法的詳解

    本篇文章介紹了,稀疏圖上的Johnson算法的詳解。需要的朋友參考下
    2013-05-05
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)字符串分割的實(shí)例

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)字符串分割的實(shí)例

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)字符串分割的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

微博| 长海县| 安吉县| 儋州市| 潜江市| 东城区| 安徽省| 涡阳县| 岳西县| 张家港市| 淮阳县| 东兰县| 介休市| 开原市| 古交市| 长武县| 墨玉县| 汽车| 巴林右旗| 常熟市| 略阳县| 图木舒克市| 霍山县| 和田市| 太仓市| 嘉黎县| 永川市| 平定县| 东安县| 铜川市| 东兴市| 大庆市| 涪陵区| 敖汉旗| 福鼎市| 阆中市| 阜阳市| 浠水县| 翁牛特旗| 菏泽市| 江华|