日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C語(yǔ)言求字符串長(zhǎng)度的四種方法實(shí)例代碼_C 語(yǔ)言

作者:橘里橘禮 ? 更新時(shí)間: 2023-01-12 編程語(yǔ)言

前言

我們知道C語(yǔ)言是自帶內(nèi)置函數(shù)strlen求字符串長(zhǎng)度的,但其實(shí)我們也可以自己編寫函數(shù)來(lái)求字符串長(zhǎng)度

方法一:調(diào)用內(nèi)置函數(shù)strlen求字符串長(zhǎng)度

#include <stdio.h>
#include <string.h>
 
int main()
{
    char s[] = "abc";
    int len = strlen(s);
    printf("%d ",len);
    return 0;
}

方法二:創(chuàng)建臨時(shí)變量計(jì)算字符串長(zhǎng)度

首先,我們自定義函數(shù)my_strlen求字符串長(zhǎng)度

在my_strlen中用count統(tǒng)計(jì)字符的個(gè)數(shù),我們傳入的char類型的指針str,對(duì)他進(jìn)行解引用(*str)得到str指向的值,循環(huán)判斷(*str)是否等于‘\0’,如果不等,則count+1,str指向下一個(gè)字符;如果相等,則說(shuō)明遍歷到了字符串結(jié)尾,最后返回count,也就是統(tǒng)計(jì)的字符的個(gè)數(shù)。

代碼實(shí)現(xiàn)如下:

#include <stdio.h>
 
int my_strlen(char* str)
{
    int count = 0; //計(jì)數(shù)
    while(*str != '\0')
    {
        count++;
        str++;
    }
    return count;
}
 
int main()
{
    char s[] = "abc";
    int len = my_strlen(s);
    printf("%d ",len);
    return 0;
}

方法三:不創(chuàng)建臨時(shí)變量計(jì)算字符串長(zhǎng)度(遞歸)

遞歸的主要思想:大事化小

使用遞歸的兩個(gè)必要條件:

1、存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)

2、每次遞歸調(diào)用之后越來(lái)越接近這個(gè)限制條件

計(jì)算字符串(abc)長(zhǎng)度的遞歸思想:

代碼實(shí)現(xiàn)如下:

#include <stdio.h>
 
int my_strlen(char* str)
{
    if(*str != '\0')
    {
        return 1 + my_strlen(str+1);
    }
    else
        return 0;
}
 
int main()
{
    char s[] = "abc";
    int len = my_strlen(s);
    printf("%d ",len);
    return 0;
}

方法四:指針減指針求字符串長(zhǎng)度

兩個(gè)指針相減,得到的是兩個(gè)指針之間元素的個(gè)數(shù)

根據(jù)這個(gè)特性,我們可以有一種新的求字符串長(zhǎng)度的思路

代碼實(shí)現(xiàn):

#include <stdio.h>
 
int my_strlen(char* str)
{
    char* start = str;
    while(*str)
    {
        str++;
    }
    return str - start;
}
 
int main()
{
    char s[] = "abc";
    int len = my_strlen(s);
    printf("%d ",len);
    return 0;
}

注意:

strlen()函數(shù)求出的字符串長(zhǎng)度為有效長(zhǎng)度,既不包含字符串末尾結(jié)束符 ‘\0’;

sizeof()操作符求出的長(zhǎng)度包含字符串末尾的結(jié)束符 ‘\0’;

當(dāng)在函數(shù)內(nèi)部使用sizeof()求解由函數(shù)的形參傳入的字符數(shù)組的長(zhǎng)度時(shí),得到的結(jié)果為指針的長(zhǎng)度,既對(duì)應(yīng)變量的字節(jié)數(shù),而不是字符串的長(zhǎng)度,此處一定要小心。(當(dāng)數(shù)組或者字符串(可以理解為數(shù)組)作為函數(shù)參數(shù)是,是會(huì)當(dāng)做指針來(lái)使用,指針的長(zhǎng)度由編譯器決定,大多數(shù)為4個(gè)byte. )

例如:

void strlen(char* str)
{
     int length;
     length = sizeof(str)/sizeof(str[0]);  //str為4個(gè)字節(jié),str[0] = 1  
}

總結(jié)

原文鏈接:https://blog.csdn.net/m0_64051621/article/details/126052572

欄目分類
最近更新