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

C語(yǔ)言字符串替換:字符,字符串,字符數(shù)組詳解

 更新時(shí)間:2021年09月01日 17:17:58   作者:余思荷  
這篇文章主要介紹了C++字符串替換的字符,字符串,字符數(shù)組,需要考慮的情況比較全面,有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下

案例描述

字符串替換是處理字符串時(shí)最常見的操作之一,也是學(xué)習(xí)字符串必須掌握的知識(shí)。本案例要求通過編程實(shí)現(xiàn)字符串“Good moring”到“Good evening”的轉(zhuǎn)換。

案例分析

我們需要從字符串中被替換的位置開始,將要替換的內(nèi)容逐個(gè)復(fù)制到原字符串中,直到字符串結(jié)束或者替換的字符串結(jié)束為止。

為了順利完成案例,需要先學(xué)習(xí)字符數(shù)組,字符串,字符指針等基礎(chǔ)知識(shí)。

必備知識(shí)

1,字符數(shù)組

字符數(shù)組是存放字符數(shù)據(jù)的數(shù)組,其中每一個(gè)元素都是單個(gè)字符

(1)字符數(shù)組的定義

字符數(shù)組定義的語(yǔ)法格式如下:

char 數(shù)組名[常量表達(dá)式]; 
char 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]

在上述語(yǔ)法中,分別列舉了定義一維字符數(shù)組和二維字符數(shù)組的方法。

示例代碼如下:

char ch[6];

(2)字符數(shù)組的初始化

在數(shù)組定義的同時(shí)也可以對(duì)數(shù)組中的元素進(jìn)行賦值,這個(gè)過程稱為數(shù)組的初始化,示例代碼如下:

char c[5] = {'h','e','l','l','o'};

注意

字符數(shù)組的初始化很簡(jiǎn)單,但要注意以下幾點(diǎn)。

(1)元素個(gè)數(shù)不能多于字符數(shù)組的大小,否則編譯器會(huì)出錯(cuò)

(2)如果初始項(xiàng)少于數(shù)組長(zhǎng)度,則空余元素均會(huì)被賦值為空字符(‘\0')

(3)如果沒有指定數(shù)組大小,則編譯器會(huì)根據(jù)初始項(xiàng)的個(gè)數(shù)為數(shù)組分配長(zhǎng)度

(4)也可以初始化二維數(shù)組

(和整型數(shù)組基本一致)

2,字符串概念

(1)字符串的概念

字符串是由數(shù)字、字母、下劃線和空格等各種字符組成的一串字符,是個(gè)常量,字符串的末尾都默認(rèn)有一個(gè)'\0'作為結(jié)束符。

"abcde"
"     "

上面這兩行都是字符串,只不過第二個(gè)字符串中的字符都是空格

字符串在各種編程語(yǔ)言中都是非常重要的數(shù)據(jù)類型,但是C語(yǔ)言中沒有字符串的固定類型,通常用字符數(shù)組的形式來(lái)存儲(chǔ)和處理字符串,這種字符數(shù)組必須以'\0'結(jié)尾。當(dāng)把一個(gè)字符串存入一個(gè)字符數(shù)組時(shí),也應(yīng)把結(jié)束符存入數(shù)組,因此該字符數(shù)組的長(zhǎng)度是實(shí)際字符數(shù)加一。

(2)用字符初始化字符數(shù)組

為了便于對(duì)字符數(shù)組進(jìn)行初始化操作,可以直接使用一個(gè)字符串常量來(lái)為另一個(gè)字符數(shù)組賦值,具體實(shí)例如下:

char char_array[6] = {"hello"};
char char_array[] = {"hello"};

(3)獲取字符串的長(zhǎng)度

字符串用數(shù)組來(lái)存儲(chǔ),用sizeof運(yùn)算符來(lái)求取各種數(shù)據(jù)類型的長(zhǎng)度,sizeof運(yùn)算符也可以用來(lái)求字符串的長(zhǎng)度,例如sizeof(“abcde”)。

除了可以使用sizeof運(yùn)算符外,還可以使用strlen()函數(shù)來(lái)獲取字符串長(zhǎng)度,strlen()函數(shù)原型如下:

unsigned int strlen(char *s);

其中s是指向字符串的指針,返回值是字符串的長(zhǎng)度。需要注意的是,使用strlen()函數(shù)得到的字符串并不包括末尾的空字符'\0'。

sizeof運(yùn)算符和strlen()函數(shù)在求字符串時(shí)是有所不同的

兩者的區(qū)別具體如下:

1,sizeof是運(yùn)算符,strlen()函數(shù)是C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),包含在string.h頭文件里

2,sizeof運(yùn)算符功能是獲得所建立對(duì)象的字節(jié)大小,計(jì)算類型所占內(nèi)存;strlen()函數(shù)是獲得字符串所占內(nèi)存的有效字節(jié)數(shù)。

3,sizeof運(yùn)算符的參數(shù)可以是數(shù)組,指針,類型,對(duì)象和函數(shù)等;strlen()函數(shù)的參數(shù)必須是指向以'\0'結(jié)尾的字符串的指針

4,sizeof運(yùn)算符計(jì)算大小在編譯時(shí)就完成,因此不能用來(lái)計(jì)算動(dòng)態(tài)分配內(nèi)存的大?。籹trlen()函數(shù)結(jié)果要在運(yùn)行時(shí)才能計(jì)算出來(lái)

注意

C語(yǔ)言中的字符串實(shí)際上是字符數(shù)組,而字符是一種基本數(shù)據(jù)類型,在字符和字符串之間進(jìn)行轉(zhuǎn)換是很容易的,接下來(lái),將char a = ‘A'轉(zhuǎn)化為字符串,具體步驟如下:

(1)創(chuàng)建一個(gè)長(zhǎng)度為2的字符數(shù)組:

char a_str[2];

(2)將第一個(gè)元素設(shè)置為對(duì)應(yīng)的字符,第二個(gè)元素設(shè)置為空字符

a_str[0] = a;
a_str[1] = '\0';

同理將字符串轉(zhuǎn)化為多個(gè)字符也很簡(jiǎn)單,具體示例如下:

char a_str[] = "AB";
char a = a_atr[0];
char b = a_atr[1];

在上述代碼中,定義了一個(gè)字符數(shù)組a_str[],該字符數(shù)組中保存的是字符串“AB”。只要將字符串的每個(gè)字符賦值給字符變量a,b,就可以完成字符串轉(zhuǎn)化為字符的操作。

3,字符串與指針

在C語(yǔ)言中,字符型指針用char * 來(lái)定義,它不僅可以指向一個(gè)字符型常量,還可以指向一個(gè)字符串。為了描述字符串與指針之間的關(guān)系,示例代碼如下:

char char_array[] = "hello";
char* ch = char_array;

以上代碼,字符指針ch即指向字符‘h'又指向字符串“hello”:如果以“%c"輸出,則只輸出當(dāng)前指針指向的字符;如果以“%s”輸出,則會(huì)輸出后面的連續(xù)內(nèi)存空間的數(shù)據(jù),直到遇到‘\0'為止。

4,字符數(shù)組與字符指針

字符數(shù)組與字符指針,也可以取數(shù)組地址賦值給字符型指針。字符數(shù)組與字符指針圍繞字符串有千絲萬(wàn)縷的關(guān)系,接下來(lái)總結(jié)一下兩者的區(qū)別與聯(lián)系:

(1)存儲(chǔ)方式

字符數(shù)組在用字符串初始化時(shí),這個(gè)字符串就存放在了字符數(shù)組開辟的內(nèi)存空間中;而字符指針變量在用字符串常量初始化時(shí),指針變量中存儲(chǔ)的是字符串的首地址,但字符串存儲(chǔ)在常量區(qū)。

上面的文字比較晦澀,下面通過一段示例代碼來(lái)輔助理解,具體如下:

char str[6] = "hello";
char*p = "hello"

上面兩行代碼中定義的變量在內(nèi)存區(qū)的存儲(chǔ)方式如圖:

在這里插入圖片描述

(2)初始化與賦值方式

初始化方式
可以對(duì)字符指針變量賦值,但不能對(duì)數(shù)組名賦值。示例代碼如下:

char *p = "hello";   //等價(jià)于char *p ;p = "hello";
char str[6] = "hello";  //char atr[6];str = "hello";這種寫法錯(cuò)誤

賦值方法

使用數(shù)組定義的字符串只能通過為數(shù)組中的元素逐一賦值或通過調(diào)用賦值函數(shù)的方式來(lái)賦值,而使用指針定義的字符串還可以實(shí)現(xiàn)直接賦值。示例代碼如下:

char *p1 = "hello" ,*p2; p1 = p2;
char str1[6] = "hello" ,str2[6];
//str1 =str2 錯(cuò)誤,數(shù)組賦值不可行

(3)字符指針與數(shù)組名

字符指針變量是可以改變的,而數(shù)組名是一個(gè)指針常量,其值不可以改變,代碼示例如下:

char *p = "hello world";
p += 7;  //字符指針變量可以改變

對(duì)字符數(shù)組char str[6] = "hello"來(lái)說(shuō),數(shù)組名是常量指針,不可改變

(4)字符串中字符的引用

可以用下標(biāo)法和地址法引用數(shù)組元素,同樣的,也可以用地址法,指針變量加下標(biāo)法來(lái)引用字符串的字符元素,示例代碼如下:

char *p str[100] = "hello world";
char ch1 = str[6];
char *p = "hello world";
char ch2 = p[6]; //等價(jià)于char ch2 = *(p + 6)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 淺談分詞器Tokenizer

    淺談分詞器Tokenizer

    分詞器的工作就是分解文本流成詞(tokens).在這個(gè)文本中,每一個(gè)token都是這些字符的一個(gè)子序列。一個(gè)分析器(analyzer)必須知道它所配置的字段,但是tokenizer不需要,分詞器(tokenizer)從一個(gè)字符流(reader)讀取數(shù)據(jù),生成一個(gè)Token對(duì)象(TokenStream)的序列
    2021-06-06
  • 論C++的lambda是函數(shù)還是對(duì)象

    論C++的lambda是函數(shù)還是對(duì)象

    這篇文章主要介紹了論C++的lambda是函數(shù)還是對(duì)象,對(duì)于有捕獲的lambda,其等價(jià)于對(duì)象。對(duì)于沒有任何捕獲的lambda,其等價(jià)于函數(shù),下面來(lái)看看具體的相關(guān)內(nèi)容,需要的朋友可以參考一下
    2022-02-02
  • C++17使用折疊表達(dá)式實(shí)現(xiàn)一個(gè)IsAllTrue函數(shù)的過程

    C++17使用折疊表達(dá)式實(shí)現(xiàn)一個(gè)IsAllTrue函數(shù)的過程

    本文介紹了利用C++17特性實(shí)現(xiàn)IsAllTrue函數(shù)的方法,詳細(xì)講解了從基于初始化列表的初級(jí)版本到使用折疊表達(dá)式和類型萃取的高級(jí)優(yōu)化版本,需要的朋友參考下吧
    2024-09-09
  • MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法

    MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法

    這篇文章主要介紹了MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法,詳細(xì)講述了實(shí)現(xiàn)擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的具體步驟與方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C++字符串類的封裝你真的了解嗎

    C++字符串類的封裝你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++字符串類的封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C語(yǔ)言實(shí)現(xiàn)三子棋(井字棋)算法

    C語(yǔ)言實(shí)現(xiàn)三子棋(井字棋)算法

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋(井字棋)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    在C++編程中,位操作是基礎(chǔ)而強(qiáng)大的技術(shù),允許在二進(jìn)制級(jí)別上操作數(shù)據(jù),對(duì)性能優(yōu)化、內(nèi)存節(jié)省和底層硬件控制至關(guān)重要,文章探討了掩碼操作、字節(jié)提取與組裝等技術(shù),并介紹了bitset類模板的使用,幫助處理二進(jìn)制數(shù)據(jù),通過實(shí)例解析如何設(shè)置、清除、檢查特定位
    2024-10-10
  • C++基礎(chǔ)入門教程(四):枚舉和指針

    C++基礎(chǔ)入門教程(四):枚舉和指針

    這篇文章主要介紹了C++基礎(chǔ)入門教程(四):枚舉和指針,本文重點(diǎn)講解了指針,有幽默搞笑的語(yǔ)言描述了指針,需要的朋友可以參考下
    2014-11-11
  • 基于C++實(shí)現(xiàn)一個(gè)日期計(jì)算器

    基于C++實(shí)現(xiàn)一個(gè)日期計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的日期計(jì)算器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-10-10
  • C語(yǔ)言實(shí)現(xiàn)病例管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)病例管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)病例管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評(píng)論