刷题笔记2——将字符串中的空格替换为指定的字符串
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
1、方法1
通过一个string对象来将元素不断加入其中,加完以后找出空格,删除即可
内容介绍1
string转char*的方法c_str(),返回一个指向正规C字符串的指针,内容与本string串相同
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
c_str()例子
char* c;
string s="1234";
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
应该这样用:
char c[20];
string s="1234";
strcpy(c,s.c_str()); // 这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
内容介绍2
erase函数的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是说有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
测试代码
class Solution {
public:
void replaceSpace(char *str,int length) {
std::string res;
std::string tmp = "%20";
for(int i = 0; i < length; ++i) {
if(str[i] == ' ')
res += tmp;
res += str[i];
}
for(int i = 0; i < res.size(); ++i) {
if(' ' == res[i])
res.erase(i, 1);
}
strcpy(str, res.c_str());
}
};
2、方法2
class Solution {
public:
void replaceSpace(char *str,int length) {
int cnt = 0;
char *tmp = str;
while(*tmp != '\0'){
if(*tmp == ' ')
cnt++;
tmp++;
}
int newLength = length + 2*cnt;
str[newLength] = '\0';
char *p_srcEnd = str + length -1;
char *p_newEnd = str + newLength -1;
while(p_srcEnd != p_newEnd){
if(*p_srcEnd != ' ') {
*p_newEnd-- = *p_srcEnd--;
} else {
*p_newEnd-- = '0';
*p_newEnd-- = '2';
*p_newEnd-- = '%';
p_srcEnd--;
}
}
}
};