题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
code
class Solution {
public:
void replaceSpace(char *str,int length) {
//先计算修改后的字符串长度
int space=0;
char* p1=str;
while(*p1!='\0'){
if(*p1++==' ')//计算顺序:先指针后+1
space++;
}
char *p2=p1+2*space;//当前p1指针在原字符串末尾,p2指针在增加空格后的字符串末尾
while(p1!=p2){//当怕p1==p2时,说明所有空格填充完毕
if(*p1!=' '){
*p2-- = *p1--;
}
else {
*p2-- = '0';
*p2-- = '2';
*p2-- = '%';
p1--;
}
}
}
};
- 利用两个指针p1和p2修改str指针
- 画图做步骤感受一下
- 笔记:
void f(char p)
char c ;
f(c);//传值
void f(char *p)
char *c ;
f(c);//传值
void f(char *p)
char c ;
f(&c);//传地址
void f(char **p)
char *c ;
f(&c) ;//转地址
测试用例
输入:hello words
输出:hello%20world
附
两段传值(?)代码
稍后研究下
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/*
class Solution {
public:
void replaceSpace(char *str,int length) {
char ch[length*3+1];
int i=0;
while(*str!=NULL){
// puts(str);
if(*str!=' '){
ch[i++]=*str;
}
else {
ch[i++]='%';
ch[i++]='2';
ch[i++]='0';
}
str++;//字符指针后移一位
}
ch[i]='\0';
//puts(ch);
str=&ch[0];
//*str=ch[0];
puts(str);
}
};*/
class Solution {
public:
void replaceSpace(char *str,int length) {
char *p = new char[3*strlen(str)+1];//*
char *tmp=p;
for(int i=0; str[i]!='\0'; i++,p++){
if(str[i]!=' '){
*p=str[i];
//puts(p);
}
else {
*p++ ='%';
*p++ ='2';
*p='0';
}
if(i==0){
tmp=p;
}
}
p=NULL;
str=tmp;
//puts(str);
}
};
int main()
{
Solution s;
char *str="Hello World";
s.replaceSpace(str,11);
puts(str);
return 0;
}