请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
牛客网AC代码:
class Solution {
public:
void replaceSpace(char *str,int length) {//length是str的容量大小,不是指长度
int len = 0,konggeCnt = 0;
while(*(str+len) != '\0')
{
if(str[len] == ' ')
konggeCnt++;
len++;
}
int p1 = len,p2 = len + konggeCnt*2;//这里要把'\0'一起复制过去
for(int i = p1;i>=0;i--){
if(str[i] != ' ')
str[p2--] = str[i];
else{
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
}
}
}
};
完整程序如下:
#include<iostream>
#include<string.h>
using namespace std;
char *replaceBlank(char str[],int length);
int getSpaceNum(char str[]);
int getLength(char str[]);
int main(){
//char str[100] = "adsfasdrwe asdf wrq 3w";
//char str[100] = "adsfasdrwe";
//char *str = nullptr;
//char str[100] = " adsrasdr";
//char str[100] = "adsrasdr ";
char str[100] = " ";
cout<<replaceBlank(str,getLength(str))<<endl;
//cout<<replaceBlank(str,-3)<<endl;
return 0;
}
int getSpaceNum(char str[]){
if(str == nullptr)
return 0;
int i=0,num=0;
while(*(str+i)){
if(*(str+i) == ' ')
num++;
i++;
}
return num;
}
int getLength(char str[]){
if(str == nullptr)
return 0;
int i=0;
while(*(str+i)){
i++;
}
return i;
}
char *replaceBlank(char str[],int length){
if(str==nullptr)
return str;
if(length <= 0)
return str;
int p1 = getLength(str);
int p2 = p1 + getSpaceNum(str) * 2;
if(p2 < length)//若字符串空余长度不够
return str;
while(p1 != p2 && p1 >= 0){
if(str[p1] != ' ')
{
str[p2--]=str[p1--];
}else{
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
p1--;
}
}
return str;
}