前言:看到各种大牛的博客以及刷题记录,自己也想记录刷题的过程。只是记录自己的一点一点的成长而已。
注:刷题模板来源于一个刷题群,牛客网有可以在线做题。
【剑指Offer 】05 替换字符串
难度:简单
题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
注:此题考查字符串的知识点
思路:先遍历字符串,统计字符串的空格数cntBlank并计算字符串长度strLength,替换后的字符串长度len=strLength+2*cntBlank;接下来,从后往前开始复制和替换,用两个指针*pstr1-——指向原字符串的末尾和*pstr2——指向替换字符串的末尾,若遇到空格即*pstr1==' ',执行替换:*pstr2--='0';*pstr2--='2',*pstr2--='%';若不是空格,则直接复制*pstr2--=*pstr1;直到两个指针相遇。(源于剑指offer)
class Solution {
public:
void replaceSpace(char *str,int length) {
//判断字符串是否为空(特例判断)
if(str==nullptr||length<=0)
return;
int strLength=0;
int cntBlank=0;
//遍历字符串统计字符串长度和空格数
for(int i=0;str[i]!='\0';++i){
++strLength;
if(str[i]==' ')
++cntBlank;
}
int len=strLength+2*cntBlank;
if(len>length)
return;
//字符串替换和复制
char*pstr1=str+strLength;
char*pstr2=str+len;
while(pstr1<pstr2){
if(*pstr1==' '){
*pstr2--='0';
*pstr2--='2';
*pstr2--='%';
}
else{
*pstr2--=*pstr1;
}
--pstr1;
}
}
};