题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
Code
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == NULL && length <= 0) return ;
int originalLength = 0;
int numberOfBlank = 0;
int i =0;
while(str[i]!='\0'){
++originalLength;
if(str[i]==' ') ++numberOfBlank;
++i;
}
int newLength = originalLength+numberOfBlank+numberOfBlank;
if(newLength>length) return ;
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while(indexOfOriginal >= 0 && indexOfOriginal<indexOfNew){
if(str[indexOfOriginal]==' '){
str[indexOfNew--] = '0';
str[indexOfNew--] = '2';
str[indexOfNew--] = '%';
}
else{
str[indexOfNew--] = str[indexOfOriginal];
}
--indexOfOriginal;
}
}
};
未考虑越界的思路。
思路:保存原字符串至新空间,该空间固定。申请两个指针,分别指向两个字符串,逐个遍历新字符串,若当前字符不为‘ ’(空格)将当前字符复制至str字符指针所在的位置,两指针同时加一;若当前字符为‘ ’(空格),str字符指针所在的位置后添加‘%20’字符串,str字符串指针加3,同时另一指针加一。
class Solution {
public:
void replaceSpace(char *str,int length) {
char *tmpstr = new char[strlen(str)+1];
strcpy(tmpstr,str);
int i=0;
int j=0;
while(i<strlen(str)){
if(tmpstr[i]!=' '){
str[j] = tmpstr[i];
j++;
i++;
}
else{
str[j++] = '%';
str[j++] = '2';
str[j++] = '0';
i++;
}
}
}
};