劍指offer之替換空格
阿新 • • 發佈:2018-12-15
1.題目描述
請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
2.問題分析
修改字串的幾個注意點:
- 如果字串是記憶體中的常量區,我們使不允許修改的;
- 修改字串我們要主要字串的長度問題,不要越界;
- 字串後面有一個’\0’識別符號,我們需要複製。
程式的分析在程式碼註釋裡面,看原始碼
3.程式碼
void replaceSpace(char *str,int length) {
if(str == NULL)
return;
//字串長度
int len = 0;
//空格長度
int countSpace = 0;
//指向字串首地址
char* p = str;
while(*p != '\0')
{
//統計字串中空格長度
if(*p == ' ')
++countSpace;
//地址後移
++p;
//統計字串長度
++len;
}
//新字串長度
int realLen = len + 2 * countSpace;
//重新指向字串首地址
p = str;
//從後向前替換字串,注意我們需要把原字串中的'\0'也拷貝到新的字串中,所以從地址p + len開始
for(int i = len; i >= 0; --i)
{
if(*(p + i) != ' ')
*(p + realLen--) = *(p + i);
else
{
*(p + realLen--) = '0';
*(p + realLen--) = '2';
*(p + realLen--) = '%';
}
}
}