【剑指offer】2.3.2 字符串——面试题4:替换空格

时间:2022-11-25 08:56:02

字符串是由若干字符组成的序列。

c/c++中每个字符串都以字符'\0'作为结尾,因此每个字符串中都有一个额外字符的开销。

为了节省内存,c/c++把常量字符串放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,他们实际会指向相同的内存地址,但用常量内存初始化数组,则不会指向同一个内存地址。

【剑指offer】2.3.2 字符串——面试题4:替换空格

【剑指offer】2.3.2 字符串——面试题4:替换空格

c#中封装的字符串类型System.String,其内容是不能改变的,一旦试图改变其内容,就会产生新的实例。

 

面试题4:替换空格

【剑指offer】2.3.2 字符串——面试题4:替换空格

先计算出空格数量,得出替换后的字符串长度,再进行移动,时间复杂度为on

若边判断空格,边替换,则每次替换要移动后续的字符串,使得时间复杂度达到on2

//题目描述
//
//请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
#include<string>
#include<iostream>
#include<windows.h>
using namespace std;
class Solution {
public:
void replaceSpace(char *str,int length) {
int cnt=0;
for(int i=0;i<length;i++){
if(*(str+i)==' ')cnt++;
}
int len=length+2*cnt;
for(int i=length;i>0;i--){
if(*(str+i)==' '){
str[len--]='0';
str[len--]='2';
str[len--]='%';
}else{

str[len--]=*(str+i);
}
}
}
};

int main(){
char str[]="We Are Happy";
// 如果使用char* str="We Are Happy"就会出错
Solution test=Solution();
test.replaceSpace(str,12);
cout<<str;
system("pause");
return 0;
}