题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
实现结果
运行时间:3ms
占用内存:476k
知识点
- 数组+指针
- 数组
- 指针
- 栈
- 1
- 2
1)char还有一个特殊的语言就是char *,它在C/C++中有专门的语义,既不同于signed char *,也不同于unsigned char *,专门用于指以’\0’为结束的字符串。
参考说的很全:深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
//一脚给DIV线踹了 一上午的工作为零 呵呵呵呵呵呵呵呵呵呵呵呵。。。。。但是路一直走一直走就会远的!
//指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。
const char* c1 = "hello word";//指针,变量只占4字节 32位
char[] c2 = {"hello word"}//数组,sizeof(c2)? \0数组结尾
//修改:
*(c1+2) = 'a';//指针指向(c1+2)是可以改变的
c2[2] = 'a';//c2数组内存中的区域可改的
//赋值:
c1 = c2;//可以(c1指针名为变量类型)
c2 = c1;//不可以(c2数组名为指向数组开头的常量)
//不想写了!这一脚出来了很多问题。。。。。
2)char char* string char[] 转化。
class Solution {
public:
void replaceSpace(char *str,int length) {//length数组长度不是字符串长度
if(str==NULL)//字符串为空
return ;
int CountOfBlanks=0;
int Originallength=0;
for(int i=0;str[i]!='\0';i++)
{
Originallength++;
if(str[i]==' ')
{
++CountOfBlanks;
}
}
int len =Originallength+2*CountOfBlanks;
//char *--->string**********************************
string temp = str;
//string---->char[]**********************************
char p[len];
int i;
for(i = 0;i<len;i++)
{
p[i] = temp[i];
}
p[i] = '\0';
//char[]--->string**********************************
temp = p[len];
//string -->char***********************************
//const char* pp = temp.data();//加const 或者用char * p=(char*)str.data();的形式
str = (char *)temp.data();
}
};
2)栈
这里会有的
代码展示
class Solution {
public:
void replaceSpace(char *str,int length) {//length 是数组长度
if(str==NULL||length<0)
return ;
int i=0;
int sorcelength=0;//记录以前的长度
int black=0;//记录空格的数量
for(;str[i] != '\0';i++)
{
sorcelength++;
if(str[i] == ' ')
{
black++;
}
}
int newlength=sorcelength+black*2;//插入后的长度
if(newlength>length)//如果计算后的长度大于总长度就无法插入
return ;
int pOld=sorcelength; //注意不要减一因为隐藏个‘\0’也要算里
int pNew=newlength;
//从后向前插入
for(;pOld>=0 && pNew >pOld;pOld--)
{
if(str[pOld] == ' ')
{
str[pNew--] = '0';
str[pNew--] = '2';
str[pNew--] = '%';
}
else
{
str[pNew--] = str[pOld];
}
}
}
};