欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. 字符函數(shù)

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

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

1.1 字符分類(lèi)函數(shù)

C語(yǔ)?中有?系列的函數(shù)是專(zhuān)?做字符分類(lèi)的,也就是?個(gè)字符是屬于什么類(lèi)型的字符。

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

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

運(yùn)行結(jié)果:

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

#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;
}

運(yùn)行結(jié)果:

對(duì)于剩余的字符分類(lèi)函數(shù),大家可以手動(dòng)進(jìn)行嘗試一下,這里就不在進(jìn)行詳細(xì)介紹啦

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

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

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

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í)的代碼進(jìn)行改造一下:

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;
}

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

2. 字符串函數(shù)

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

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

2.1 strlen 函數(shù)

strlen函數(shù)是用來(lái)計(jì)算參數(shù)(字符串)長(zhǎng)度的(不包括終止的空字符 \0 )

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

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

strlen函數(shù)的使用:

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

為什么這里計(jì)算str字符數(shù)組的長(zhǎng)度是74呢?因?yàn)檫@里的初始化方式是不會(huì)自動(dòng)補(bǔ)上 \0,所以strlen函數(shù)會(huì)根據(jù)地址一直往后找,直到找到 \0,所以這里的 74 實(shí)際上是一個(gè)隨機(jī)值。

此時(shí)我們?cè)跀?shù)組的末尾加上 \0 這時(shí)候strlen函數(shù)計(jì)算的結(jié)果就是 \0前面的字符個(gè)數(shù)。 

2.2 strcpy 函數(shù)

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

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

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

例如:

2.3 strcat 函數(shù)

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

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

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

例如:

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

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

2.4 strcmp 函數(shù)

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

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

例如:

2.5 strncpy 函數(shù)

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

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

例如:

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

2.6 strncat 函數(shù)

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

例如:

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

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

例如:

2.7 strncmp 函數(shù)

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

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

例如:

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

2.8 strstr 函數(shù)

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

例如:

結(jié)語(yǔ)

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

相關(guān)文章

  • 深入淺出理解C語(yǔ)言初識(shí)結(jié)構(gòu)體

    深入淺出理解C語(yǔ)言初識(shí)結(jié)構(gòu)體

    C?數(shù)組允許定義可存儲(chǔ)相同類(lèi)型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是?C?編程中另一種用戶(hù)自定義的可用的數(shù)據(jù)類(lèi)型,它允許你存儲(chǔ)不同類(lèi)型的數(shù)據(jù)項(xiàng),本篇讓我們來(lái)了解C?的結(jié)構(gòu)體
    2022-02-02
  • QT TCP實(shí)現(xiàn)簡(jiǎn)單的通信示例

    QT TCP實(shí)現(xiàn)簡(jiǎn)單的通信示例

    這篇文章主要為大家詳細(xì)介紹了QT TCP簡(jiǎn)單的通信示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • QT調(diào)用vs2019生成的c++動(dòng)態(tài)庫(kù)的方法實(shí)現(xiàn)

    QT調(diào)用vs2019生成的c++動(dòng)態(tài)庫(kù)的方法實(shí)現(xiàn)

    本文主要介紹了QT調(diào)用vs2019生成的c++動(dòng)態(tài)庫(kù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 使用c++11 constexpr時(shí)遇到的坑詳解

    使用c++11 constexpr時(shí)遇到的坑詳解

    c++11 constexpr將變量聲明為constexpr類(lèi)型以便由編譯器來(lái)驗(yàn)證變量是否是一個(gè)常量表達(dá)式,這篇文章主要給大家介紹了關(guān)于使用c++11 constexpr時(shí)遇到的坑,需要的朋友可以參考下
    2021-05-05
  • C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼

    C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼

    猜數(shù)字小游戲是我們小時(shí)候喜歡我們一個(gè)經(jīng)典小游戲。這篇文章將利用C語(yǔ)言中的循環(huán)語(yǔ)句、分支語(yǔ)句和函數(shù)實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-10-10
  • 解析C++中的字符串處理函數(shù)和指針

    解析C++中的字符串處理函數(shù)和指針

    這篇文章主要介紹了解析C++中的字符串處理函數(shù)和指針,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C++中for auto的用法及說(shuō)明

    C++中for auto的用法及說(shuō)明

    這篇文章主要介紹了C++中for auto的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++實(shí)現(xiàn)拓?fù)渑判颍ˋOV網(wǎng)絡(luò))

    C++實(shí)現(xiàn)拓?fù)渑判颍ˋOV網(wǎng)絡(luò))

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)拓?fù)渑判?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++超詳細(xì)講解RTTI和cast運(yùn)算符的使用

    C++超詳細(xì)講解RTTI和cast運(yùn)算符的使用

    RTTI(Runtime Type Identification)是“運(yùn)行時(shí)類(lèi)型識(shí)別”的意思。C++引入這個(gè)機(jī)制是為了讓程序在運(yùn)行時(shí)能根據(jù)基類(lèi)的指針或引用來(lái)獲得該指針或引用所指的對(duì)象的實(shí)際類(lèi)型,cast強(qiáng)制轉(zhuǎn)換運(yùn)算符是一種特殊的運(yùn)算符,它把一種數(shù)據(jù)類(lèi)型轉(zhuǎn)換為另一種數(shù)據(jù)類(lèi)型
    2022-08-08
  • 基于atoi()與itoa()函數(shù)的內(nèi)部實(shí)現(xiàn)方法詳解

    基于atoi()與itoa()函數(shù)的內(nèi)部實(shí)現(xiàn)方法詳解

    本篇文章是對(duì)atoi()與itoa()函數(shù)的內(nèi)部實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論