c/c++把常量字串放到單獨的乙個記憶體區域。當幾個
指標賦值給相同的常量字串時,它們實際上會指向相同的記憶體位址。但是用常量記憶體初始化陣列,情況卻不相同。
**如下:
#includeusing namespace std;
int main()
執行結果:
same
no same
請按任意鍵繼續. . .
分析:
ch1和ch2是兩個指標,我們無需為它們分配記憶體以儲存字串內容,而只需要把它們指向「abcd」在記憶體中的位址就可以了。由於「abcd」是常量字串,它在記憶體中只有乙個拷貝,因此ch1和ch2指向的是同乙個位址。
ch3和ch4是兩個字串陣列,我們會為它們分別分配兩個長度為5個位元組的空間,並把「abcd」的內容分別複製到陣列中去,這是兩個初始位址不同的陣列,因此ch1和ch2的值也不相同。
利用string
源**:
#include#include#includeusing std::cout;
using std::endl;
using std::find;
using std::string;
int main()
cout << str << endl;
system("pause");
return 0;
}
輸出結果:
請按任意鍵繼續. . .
遍歷字串,沒找到乙個空格,將空格替換為「%20」,並將後邊的字元向後移動兩個位置。
先統計字串中空格的數目並計算替換之後字串的總長度,每替換乙個空格,字元長度增加2,因此替換之後的長度等於原始長度+空格數*2.
(a)把第乙個指標指向字串的末尾,把第二個指標指向替換之後的字串的末尾
(b)依次賦值字串中的內容,直至第乙個指標碰到第乙個空格
(c)把第乙個空格替換成「%20」,把第乙個指標向前移動1格,把第二個指標向前移動3格
(d)依次向前賦值字串中的字元,直至碰到空格
(e)替換字串中的倒數第二個空格,把第乙個指標向前移動1格,把第二個指標向前移動3格
源**:
#include#include//malloc
using std::cout;
using std::endl;
void replace(char *ch)
char *temp = (char *)malloc((len + count * 2)*sizeof(char));//分配新的空間
for (int i = 0; i < len; i++)//將ch中的內容複製到新分配的空間
temp[i] = ch[i];
char *p1 = temp + len - 1;//指向ch的最後乙個字元'\n'
char *p2 = temp + len + count * 2 - 1;//指向新分配空間的最後乙個字元空間
while (p1 != p2)
else
}cout << temp << endl;
}int main()
執行結果:
%20%20%20we%20%20
請按任意鍵繼續. . .
官方源**:
//// 《劍指offer——名企面試官精講典型程式設計題》**
// 著作權所有者:何海濤
#include #include /*length 為字元陣列string的總容量*/
void replaceblank(char string, int length)
/*newlength 為把空格替換成'%20'之後的長度*/
int newlength = originallength + numberofblank * 2;
if (newlength > length)
return;
int indexoforiginal = originallength;
int indexofnew = newlength;
while (indexoforiginal >= 0 && indexofnew > indexoforiginal)
else
--indexoforiginal; }}
void test(char* testname, char string, int length, char expected)
// 空格在句子中間
void test1()
// 空格在句子開頭
void test2()
// 空格在句子末尾
void test3()
// 連續有兩個空格
void test4()
// 傳入null
void test5()
// 傳入內容為空的字串
void test6()
//傳入內容為乙個空格的字串
void test7()
// 傳入的字串沒有空格
void test8()
// 傳入的字串全是空格
void test9()
int main3()
測試用例:
輸入的字串包含空格(空格位於字串最前面,空格位於字串的最後面,空格位於字串中間,字串中有連續多個空格)
輸入的字串中沒有空格
特殊輸入測試(字串中十個null指標、字串十個空字串、字串中只有乙個空格字元,字串中只有連續多個空格)
劍指offer面試題 替換空格
題目 請實現乙個函式,把字串中的每個空格替換成 20 例如輸入 則輸出 解析 時間複雜度為o n 的解法。完整 及測試用例實現 cpp view plain copy include using namespace std include length 為字元陣列string的總容量 void re...
替換空格(劍指offer面試題4)
分析 從頭到尾掃瞄字串,遇到空格就替換,導致後面的字元都要向後移,意味著總時間複雜度為o n 2 更好的辦法,從字串後面遍歷替換。先遍歷所有的空格,每多乙個空格,字串長度加2個,也就是說最後替換後的字串長度為原長度 2 空格數,設定兩個指標,指向原始字串末尾和新字串末尾,依次向前遍歷,原始字串指標遇...
劍指offer 面試題 (替換空格) 1
題目分析 首先,我們應該想到的是原來是乙個空格字元,替換之後變為三個字元 2 0 如果我們直接在原來的字串上進行替換,就有可能覆蓋掉原本的內容 如果是建立新的字串並 新的字串上做替換,那麼我們可以自己分配好足夠的記憶體,所以我們應該向面試官問清楚如果面 試官告訴你在原本的字串上做修改,並且記憶體足夠...