亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言如何計(jì)算字符串長(zhǎng)度

 更新時(shí)間:2023年02月06日 09:29:38   作者:慕白昂  
這篇文章主要介紹了C語言如何計(jì)算字符串長(zhǎng)度問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C語言計(jì)算字符串長(zhǎng)度

思路分析

字符串的結(jié)束標(biāo)志是’\0’,因此計(jì)算字符串的長(zhǎng)度的核心思想就是通過字符指針順序檢索每一個(gè)字符,直到檢測(cè)到’\0’為止,以下是實(shí)現(xiàn)該算法的幾種方式。

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

1.用while循環(huán)實(shí)現(xiàn)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<windows.h>

int myStrlen(char* str)
{
?? ?int count = 0;
?? ?while(*str != '\0')
?? ?{
?? ??? ?count++;//記錄字符串長(zhǎng)度
?? ??? ?str++;
?? ?}
?? ?return count;
}
int main()
{
?? ?char arr[] = "bit";
?? ?int len= myStrlen(arr);
?? ?printf("%d\n", len);
?? ?system("pause");
?? ?return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<windows.h>

int myStrlen( char *str) ?
{
?? ?if ((str == NULL) || (*str == '\0'))?
?? ?{
?? ??? ?return 0;
?? ?}
?? ?else {
?? ??? ?return myStrlen(str + 1) + 1;
?? ?}
}
int main()
{
?? ?char arr[] = "bit";
?? ?int len= myStrlen(arr);
?? ?printf("%d\n", len);
?? ?system("pause");
?? ?return 0;
}

3.另一種遞歸實(shí)現(xiàn)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<windows.h>
#include <assert.h>
int myStrlen(const char *str) ?
{
?? ?assert(str != NULL);
?? ?return *str ? (myStrlen(++str) + 1) : 0;
}
int main()
{
?? ?char arr[] = "bit";
?? ?int len= myStrlen(arr);
?? ?printf("%d\n", len);
?? ?system("pause");
?? ?return 0;
}

計(jì)算字符串長(zhǎng)度的函數(shù)解讀

  • strlen函數(shù)求得的字符串長(zhǎng)度是從字符串第一個(gè)元素到第一個(gè)'\0'之間元素的個(gè)數(shù)(如果字符串中間有'\0',則結(jié)果不是整個(gè)字符串的長(zhǎng)度),同時(shí)不包括該'\0'
  • sizeof求得的結(jié)果是存儲(chǔ)該字符串的變量占用的空間大小,因而一定會(huì)包括'\0'.若'\0'后還有空余的空間,也會(huì)包含到結(jié)果里面

解釋(與2種求值方式的實(shí)現(xiàn)原理有關(guān)):

1.strlen()的一種實(shí)現(xiàn)就是遍歷字符串,遇到'\0'就終止,因而返回的結(jié)果是第一個(gè)'\0'前字符元素的個(gè)數(shù)

2.sizeof 常用來求變量占用內(nèi)存空間的大小,因而它返回的是存儲(chǔ)字符串的變量所占用的內(nèi)存空間大小,用來求字符串的長(zhǎng)度,只在特定情況下可行,即字符數(shù)組剛好被一個(gè)字符串占滿。

在C語言中,與strlen函數(shù)不同的是,sizeof不是一個(gè)函數(shù),而是判斷數(shù)據(jù)類型或者表達(dá)式長(zhǎng)度符的關(guān)鍵字,也可以說是C/C++中的一個(gè)操作符(operator),其作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。

注意:字節(jié)數(shù)的計(jì)算在程序編譯時(shí)進(jìn)行,而不是在程序執(zhí)行的過程中才計(jì)算出來!

數(shù)組的sizeof值等于數(shù)組所占用的內(nèi)存字節(jié)數(shù),如:

char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 結(jié)果為4,字符末尾還存在一個(gè)NULL終止符
sizeof( a2 ); // 結(jié)果為3*4=12(依賴于int)

那么如何求數(shù)組中元素的個(gè)數(shù)呢? (以下兩種方式是等價(jià)的)

int c1= sizeof (a1)/ sizeof ( char ); //總長(zhǎng)度/單個(gè)元素的長(zhǎng)度 ?char型
int c2= sizeof (a2)/ sizeof (a2[0]); //總長(zhǎng)度/第一個(gè)元素的長(zhǎng)度 int型

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言深入探究自定義類型之結(jié)構(gòu)體與枚舉及聯(lián)合

    C語言深入探究自定義類型之結(jié)構(gòu)體與枚舉及聯(lián)合

    今天我們來學(xué)習(xí)一下自定義類型,自定義類型包括結(jié)構(gòu)體、枚舉、聯(lián)合體,小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考
    2022-05-05
  • C語言實(shí)戰(zhàn)之紙牌游戲

    C語言實(shí)戰(zhàn)之紙牌游戲

    這篇文章主要為大家介紹了通過C語言實(shí)現(xiàn)的紙牌游戲的示例代碼,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語言有一定的幫助,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2021-12-12
  • C++模擬實(shí)現(xiàn)vector流程詳解

    C++模擬實(shí)現(xiàn)vector流程詳解

    這篇文章主要介紹了C++容器Vector的模擬實(shí)現(xiàn),Vector是一個(gè)能夠存放任意類型的動(dòng)態(tài)數(shù)組,有點(diǎn)類似數(shù)組,是一個(gè)連續(xù)地址空間,下文更多詳細(xì)內(nèi)容的介紹,需要的小伙伴可以參考一下
    2022-08-08
  • C++實(shí)現(xiàn)哈夫曼樹簡(jiǎn)單創(chuàng)建與遍歷的方法

    C++實(shí)現(xiàn)哈夫曼樹簡(jiǎn)單創(chuàng)建與遍歷的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)哈夫曼樹簡(jiǎn)單創(chuàng)建與遍歷的方法,對(duì)于C++算法的學(xué)習(xí)來說不失為一個(gè)很好的借鑒實(shí)例,需要的朋友可以參考下
    2014-07-07
  • 基于Matlab制作偽3D第一視角迷宮小游戲

    基于Matlab制作偽3D第一視角迷宮小游戲

    這篇文章主要為大家詳細(xì)介紹了如何利用Matlab語言制作偽3D第一視角迷宮小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-07-07
  • C語言實(shí)現(xiàn)的猴子分桃問題算法解決方案

    C語言實(shí)現(xiàn)的猴子分桃問題算法解決方案

    這篇文章主要介紹了C語言實(shí)現(xiàn)的猴子分桃問題算法,較為詳細(xì)的分析了猴子分桃問題算法的原理與通過遞歸算法解決問題的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • C語言近萬字為你講透棧和隊(duì)列

    C語言近萬字為你講透棧和隊(duì)列

    對(duì)于線性表,我們可能要執(zhí)行下列操作:訪問表的第k個(gè)結(jié)點(diǎn)、在k這個(gè)結(jié)點(diǎn)之前或者之后插入一個(gè)新結(jié)點(diǎn),抑或是刪除第k個(gè)結(jié)點(diǎn)等等操作,其中我們會(huì)遇到值對(duì)第一個(gè)或者最后一個(gè)結(jié)點(diǎn)插入、刪除、和訪問值的線性表,我們給它們以特殊的名稱:棧、隊(duì)列、雙端隊(duì)列
    2022-05-05
  • C語言二叉排序樹的創(chuàng)建,插入和刪除

    C語言二叉排序樹的創(chuàng)建,插入和刪除

    本文主要介紹了Java實(shí)現(xiàn)二叉排序樹的查找、插入、刪除、遍歷等內(nèi)容。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2021-10-10
  • C/C++題解LeetCode1295統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字

    C/C++題解LeetCode1295統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字

    這篇文章主要為大家介紹了C/C++題解LeetCode1295統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 如何通過函數(shù)指針調(diào)用函數(shù)(實(shí)現(xiàn)代碼)

    如何通過函數(shù)指針調(diào)用函數(shù)(實(shí)現(xiàn)代碼)

    指針可以不但可以指向一個(gè)整形,浮點(diǎn)型,字符型,字符串型的變量,也可以指向相應(yīng)的數(shù)組,而且還可以指向一個(gè)函數(shù)
    2013-09-09

最新評(píng)論