C語(yǔ)言字符串替換空格實(shí)例詳解
一、題目描述
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串 s 中的每個(gè)空格替換成"%20"。
示例:
輸入:s = "We are happy."
輸出:"We%20are%20happy."
限制:0 <= s 的長(zhǎng)度 <= 10000
二、思路分析
思路
C語(yǔ)言的字符串無(wú)法改變大小,所以無(wú)法直接在原來(lái)的字符串上操作。于是我們先統(tǒng)計(jì)空格個(gè)數(shù),算出替換后的字符串的大小,并申請(qǐng)一塊新內(nèi)存。(注意要多申請(qǐng)一個(gè)byte,放字符串結(jié)尾符’\0’)。再次遍歷這個(gè)字符串,將空格替換成%20。
算法流程:首先得到字符串s的長(zhǎng)度
遍歷這個(gè)字符串,統(tǒng)計(jì)空格個(gè)數(shù)
計(jì)算新的字符串需要的空間,并申請(qǐng)一塊新內(nèi)存
遍歷字符串s,如果沒(méi)有空格則進(jìn)行正常賦值。如果碰到空格,則在新字符串對(duì)應(yīng)的三個(gè)位置放上%20
三、整體代碼
整體代碼如下
char* replaceSpace(char* s){
int count = 0;
int len = 0;
while(s[len] != '\0'){
len++;
}
int i = 0;
for(i = 0; i < len; i++){
if(s[i] == ' '){
count++;
}
}
char* str = (char*)malloc(sizeof(char)*(len + 1 + count * 2));
int j = 0;
for(i = 0; i < len; i++, j++){
str[j] = s[i];
if(s[i] == ' '){
str[j++] = '%';
str[j++] = '2';
str[j] = '0';
}
}
str[j] = '\0';
return str;
}
運(yùn)行,測(cè)試通過(guò)

總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
vector與map的erase()函數(shù)詳細(xì)解析
vector和map都不能將it++寫(xiě)在for循環(huán)中,而在循環(huán)體內(nèi)erase(it)2013-09-09
C++中二進(jìn)制數(shù)據(jù)序列化和反序列化詳解
這篇文章主要為大家詳細(xì)介紹了C++中二進(jìn)制數(shù)據(jù)序列化和反序列化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11
C++深淺拷貝和string類(lèi)的兩種寫(xiě)法詳解
這篇文章主要為大家詳細(xì)介紹了C++深淺拷貝和string類(lèi)的兩種寫(xiě)法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
C++數(shù)據(jù)結(jié)構(gòu)紅黑樹(shù)全面分析
今天的這一篇博客,我要跟大家介紹二叉搜索樹(shù)中的另一顆樹(shù)——紅黑樹(shù),它主要是通過(guò)控制顏色來(lái)控制自身的平衡,但它的平衡沒(méi)有AVL樹(shù)的平衡那么嚴(yán)格2022-02-02
C語(yǔ)言修煉之路初識(shí)指針陰陽(yáng)竅?地址還歸大道真上篇
指針是指向另一個(gè)變量的變量。意思是一個(gè)指針保存的是另一個(gè)變量的內(nèi)存地址。換句話說(shuō),指針保存的并不是普通意義上的數(shù)值,而是另一個(gè)變量的地址值。一個(gè)指針保存了另一個(gè)變量的地址值,就說(shuō)這個(gè)指針“指向”了那個(gè)變量2022-02-02
C語(yǔ)言中system()函數(shù)的用法總結(jié)
system()函數(shù)功能強(qiáng)大。以下小編就為大家介紹一下在C語(yǔ)言中system()函數(shù)的用法。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10

