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--) = '%';
}
}
}