一. 题目
1. 题目
请实现一个函数,将一个字符串中的每个空格替换成
“ ”
。例如,当字符串为We Are Happy.
则经过替换之后的字符串为We Are Happy
2. 基础框架
- C 版本的代码框架
class Solution {
public:
void replaceSpace(char *str,int length) {
}
};
3. 原题链接
牛客网 替换空格
二. 解题思路
1. 思路分析
只借助
指向的字符串,从后向前依次移动;
一个空格最后替换成'%''2''0'
,一个字符替换为三个字符,相当于增加了2个字符;
一个循环统计字符串中空格的个数,替换之后的字符串长度就是原来字符串长度加上空格数的2倍.
两个变量
分别记录原来字符串的最后一个字符的下标与新字符串的最后一个字符的下标;
一个循环,如果下标
的字符不是空格,就把
下标的字符移动到
下标位置,之后两个下标均减1;
如果下标
的字符是空格,
减1,,把'0'、'2'、'%'
这三个字符依次存入下标
位置,每次存入后都
;
当空格替换完成时,end1与end2相等,结束循环。
2. 代码详解
思路1
代码语言:javascript复制class Solution {
public:
void replaceSpace(char *str,int length) {
//找空格数
int cnt = 0;
char* start = str;
while(*start){
if(*start == ' '){
cnt ;
}
start ;
}
//从后向前移,遇到空格
//前后下标
int end1 = length - 1;
int end2 = length - 1 2*cnt;
while(end1 != end2){
if(str[end1] != ' '){
str[end2--] = str[end1--];
}
else{
str[end2--] = '0';
str[end2--] = '2';
str[end2--] = '%';
end1--;
}
}
}
};
思路2
代码语言:javascript复制class Solution {
public:
void replaceSpace(char *str,int length) {
//找空格数量
char* start = str;
int cnt = 0;
while (*start) {
if (*start == ' ') {
cnt ;
}
start ;
}
int len1 = length;
int len2 = length 2 * cnt;
//创建数组存放新字符串
char* s = (char*)malloc(sizeof(char) * (len2 1));
start = str;
char* ps = s;
while (*start) {
if (*start != ' ') {
*ps = *start ;
}
else {
start ;
*ps = '%';
*ps = '2';
*ps = '0';
}
}
*ps = '