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

C語言字符函數(shù)與字符串函數(shù)的實現(xiàn)示例

 更新時間:2024年11月05日 11:20:03   作者:愛編程的小新☆  
C語言標(biāo)準(zhǔn)庫中的<ctype.h>和<string.h>頭文件分別提供了豐富的字符處理和字符串處理函數(shù),本文就來介紹一下C語言字符函數(shù)與字符串函數(shù)的實現(xiàn)示例,感興趣的可以了解一下

1. 字符函數(shù)

在C語言標(biāo)準(zhǔn)庫中提供了一系列用于處理字符的函數(shù),這些函數(shù)定義在 <ctype.h>頭文件中。

字符函數(shù)分為兩種:字符分類函數(shù)和字符轉(zhuǎn)換函數(shù)

1.1 字符分類函數(shù)

C語?中有?系列的函數(shù)是專?做字符分類的,也就是?個字符是屬于什么類型的字符。

例如:islower函數(shù)是判斷參數(shù)部分是否為小寫字母,如果是小寫字母就返回非0的數(shù)字,如果不是小寫字母就返回0

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c = 'A';
	int ret = islower(c);
	printf("%d", ret);
	return 0;
}

運行結(jié)果:

練習(xí):寫?個代碼,將字符串中的?寫字?轉(zhuǎn)?寫,其他字符不變。

#include<stdio.h>
#include<ctype.h>
int main()
{
	char str[] = "hello world";
	int i = 0;
	while (str[i])
	{
		if (islower(str[i]))
		{
			str[i] = str[i] - 32;
		}
		i++;
	}
	printf("%s", str);
	return 0;
}

運行結(jié)果:

對于剩余的字符分類函數(shù),大家可以手動進行嘗試一下,這里就不在進行詳細介紹啦

1.2 字符轉(zhuǎn)換函數(shù)

C語?提供了2個字符轉(zhuǎn)換函數(shù):

tolower ( c ); //將參數(shù)傳進去的?寫字?轉(zhuǎn)?寫
toupper ( c ); //將參數(shù)傳進去的?寫字?轉(zhuǎn)?寫

tolower函數(shù)示例:

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c=tolower('A');
	printf("%c", c);
	return 0;
}

 

toupper函數(shù)示例:

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c=toupper('a');
	printf("%c", c);
	return 0;
}

學(xué)習(xí)完字符轉(zhuǎn)換函數(shù)后,我們將上面練習(xí)的代碼進行改造一下:

int main()
{
	char str[] = "hello world";
	int i = 0;
	while (str[i])
	{
		if (islower(str[i]))
		{
			str[i] = toupper(str[i]);
		}
		i++;
	}
	printf("%s", str);
	return 0;
}

上?的代碼,我們將?寫轉(zhuǎn)?寫,是-32完成的效果,有了轉(zhuǎn)換函數(shù),就可以直接使? tolowe函數(shù)。

2. 字符串函數(shù)

在C語言標(biāo)準(zhǔn)庫中的<string.h>頭文件中提供了一系列用于處理字符串的函數(shù),這些函數(shù)用于字符串的復(fù)制、連接、比較、搜索、分割等操作。

下面介紹一些C語言中常用的字符串函數(shù)

2.1 strlen 函數(shù)

strlen函數(shù)是用來計算參數(shù)(字符串)長度的(不包括終止的空字符 \0 )

strlen函數(shù)的注意事項:

  • 字符串以 '\0' 作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中 '\0' 前?出現(xiàn)的字符個數(shù)(不包    含 '\0' )。
  • 參數(shù)指向的字符串必須要以 '\0' 結(jié)束。
  • 注意函數(shù)的返回值為 size_t,是?符號的( 易錯 )
  •  strlen的使?需要包含頭?件

strlen函數(shù)的使用:

注意這里的初始化方式會在 str字符數(shù)組默認最后加上一個 \0,如果用另一種初始化方式會出現(xiàn)什么現(xiàn)象呢?

為什么這里計算str字符數(shù)組的長度是74呢?因為這里的初始化方式是不會自動補上 \0,所以strlen函數(shù)會根據(jù)地址一直往后找,直到找到 \0,所以這里的 74 實際上是一個隨機值。

此時我們在數(shù)組的末尾加上 \0 這時候strlen函數(shù)計算的結(jié)果就是 \0前面的字符個數(shù)。 

2.2 strcpy 函數(shù)

strcpy函數(shù)會將源指向的字符串復(fù)制到目標(biāo)指向的數(shù)組中,包括終止的空字符(并在該點停止)

strcpy函數(shù)的注意事項: 

  • destination指向字符串復(fù)制到的數(shù)組,source指向要復(fù)制的字符串
  • 源字符串必須以 '\0' 結(jié)束。
  • 會將源字符串中的 '\0' 拷?到?標(biāo)空間。
  • ?標(biāo)空間必須?夠?,以確保能存放源字符串。(否則會出現(xiàn)棧幀空間溢出的現(xiàn)象)
  • ?標(biāo)空間必須可修改。

例如:

2.3 strcat 函數(shù)

strcat函數(shù)是將字符串source連接到destination的末尾(包括終止的空字符 \0)

strcat函數(shù)的注意事項:

  • 源字符串必須以 '\0' 結(jié)束。
  • ?標(biāo)字符串中也得有 \0 ,否則沒辦法知道追加從哪?開始。
  • ?標(biāo)空間必須有?夠的?,能容納下源字符串的內(nèi)容。
  • ?標(biāo)空間必須可修改。

例如:

注意這里被追加的目標(biāo)空間必須保證足夠大,否則也會出現(xiàn)棧幀空間溢出的現(xiàn)象

那么strcat函數(shù)是否可以自己追加自己呢?其實是可以的,但是一般不會這樣使用,使用不當(dāng)很容易造成死循環(huán)的問題 ,對于自己追加自己,我們一般使用strncat函數(shù),在下面我們將會了解到strncat函數(shù)。

2.4 strcmp 函數(shù)

strcmp函數(shù)是用于兩個字符串進行比較的

  • 如果第?個字符串?于第?個字符串,則返回?于0的數(shù)字
  • 如果第?個字符串等于第?個字符串,則返回0
  • 如果第?個字符串?于第?個字符串,則返回?于0的數(shù)字 

例如:

2.5 strncpy 函數(shù)

strncpy和strcpy是非常相似的,strncpy在參數(shù)部分加上了復(fù)制的字節(jié)個數(shù)(size_t  num)

用法與strcpy也是一模一樣的,只是這時候可以由我們操控復(fù)制多少個字節(jié)(num)到目標(biāo)位置。

例如:

注意:如果源字符串的?度?于num,則拷?完源字符串之后,在?標(biāo)的后邊追加0,直到num個。 

2.6 strncat 函數(shù)

對比strcat函數(shù),strncat函數(shù)在參數(shù)部分也多了一個(size_t num)追加的字節(jié)個數(shù)

例如:

這時候就可以自己操控自己想要追加的內(nèi)容了

注意:如果source 指向的字符串的?度?于num的時候,只會將字符串中到 \0 的內(nèi)容追加到destination指向的字符串末尾

例如:

2.7 strncmp 函數(shù)

對比strcmp函數(shù),strncmp函數(shù)在參數(shù)部分也多了一個(size_t num)比較的字節(jié)個數(shù)

?較str1和str2的前num個字符,如果相等就繼續(xù)往后?較,最多?較num個字?,如果提前發(fā)現(xiàn)不? 樣,就提前結(jié)束,?的字符所在的字符串?于另外?個。如果num個字符都相等,就是相等返回0

例如:

 此時只是比較的str1和str2中的前3個字符,前三個字符相等所以返回值為0

2.8 strstr 函數(shù)

strstr函數(shù)的作用是在一個字符串(str1)中查找第一次出現(xiàn)的子字符串(str2),并返回指向該子字符串的指針,如果沒有找到子字符串,則返回NULL(空指針)

例如:

結(jié)語

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

相關(guān)文章

  • C++中字符串查找操作的兩則實例分享

    C++中字符串查找操作的兩則實例分享

    這篇文章主要介紹了C++中字符串的查找操作的兩則實例分享,分別是找到第一個只出現(xiàn)一次的字符以及找出連續(xù)最長的數(shù)字串的方法,需要的朋友可以參考下
    2016-02-02
  • 如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方?

    如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方?

    本篇文章是對如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方的實現(xiàn)方法,進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++發(fā)送HTTP請求的實現(xiàn)代碼

    C++發(fā)送HTTP請求的實現(xiàn)代碼

    這篇文章主要介紹了C++發(fā)送HTTP請求的實現(xiàn)代碼,需要的朋友可以參考下
    2014-06-06
  • C++課程設(shè)計之學(xué)生成績管理系統(tǒng)

    C++課程設(shè)計之學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++課程設(shè)計之學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++ new、delete(new[]、delete[])操作符重載需要注意的問題

    C++ new、delete(new[]、delete[])操作符重載需要注意的問題

    這篇文章主要介紹了C++ new、delete(new[]、delete[])操作符重載需要注意的問題,本文同時講解了兼容默認的 new、delete 的錯誤處理方式、多態(tài)的問題等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++內(nèi)存分布及用法

    C++內(nèi)存分布及用法

    這篇文章主要介紹了C++內(nèi)存分布及用法,從內(nèi)存的基礎(chǔ)概念到內(nèi)存分配進行了講解,內(nèi)存是我們開發(fā)中最重要的一部分,往往邏輯上的錯誤就會造成內(nèi)存泄漏,導(dǎo)致程序無法運行,下面我們就來了解文章對該內(nèi)容的詳細介紹
    2021-12-12
  • 解析取模運算% 和位與運算& 之間的關(guān)系詳解

    解析取模運算% 和位與運算& 之間的關(guān)系詳解

    本篇文章是對取模運算%和位與運算&之間的關(guān)系進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實現(xiàn)LeetCode(145.二叉樹的后序遍歷)

    C++實現(xiàn)LeetCode(145.二叉樹的后序遍歷)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(145.二叉樹的后序遍歷),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 使用C語言實現(xiàn)內(nèi)存池的示例代碼

    使用C語言實現(xiàn)內(nèi)存池的示例代碼

    所謂內(nèi)存池,顧名思義和線程池的設(shè)計原理是一樣的,為了減少頻繁申請釋放內(nèi)存而帶來的資源消耗,減少釋放內(nèi)存后產(chǎn)生的內(nèi)存碎片,下面我們就來看看如何使用C語言實現(xiàn)內(nèi)存池吧
    2024-02-02
  • C/C++中#define的妙用分享

    C/C++中#define的妙用分享

    本文主要介紹了C++/C關(guān)于#define的一些妙用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

胶南市| 读书| 阿拉善右旗| 蒲城县| 锦州市| 万年县| 张掖市| 元阳县| 三穗县| 阳山县| 竹北市| 韩城市| 武胜县| 桂阳县| 浦城县| 石台县| 鹿邑县| 天门市| 庆元县| 泗洪县| 武安市| 同心县| 洛宁县| 浦北县| 浙江省| 柏乡县| 垫江县| 永修县| 太仆寺旗| 台南市| 凭祥市| 新郑市| 获嘉县| 东海县| 柘荣县| 西青区| 禹城市| 任丘市| 松溪县| 石泉县| 新龙县|