剑指 Offer 05. 替换空格
题目链接: leetcode.
append 向字符串的末尾添加字符
insert 将一个、多个或一些列元素插入字符串中的指定位置。
append("%20") 是可以的,因为可以把字符串传给指针。
basic_string<CharType, Traits, Allocator>& append(
const value_type* ptr);
但是append(s[i]) 会报错 error: no matching member function for call to ‘append’
append(&s[i]) 则会
输入 “We are happy.”
输出 “We are happy.e are happy.%20are happy.re happy.e happy.%20happy.appy.ppy.py.y…”
预期结果 “We%20are%20happy.”
append()不是为了在字符串的后面添加单个字符而设计的,而是字符串。push_back()是为此目的而设计的。或者可以只使用操作符
+,适用于单个字符和多个字符。
所以:
ans.append(1, s[i]); // or...
ans.push_back(s[i]); // or...
ans += s[i];
push_back() 在字符串的末尾处添加一个元素。
replace() 用指定字符或者从其他范围、字符串或 C 字符串复制的字符来替代字符串中指定位置的元素。
replace似乎是没法完成把一个字符改成三个不同的字符滴
/*
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.5 MB, 在所有 C++ 提交中击败了37.87%的用户
*/
class Solution {
public:
string replaceSpace(string s) {
if(s.empty())
return s;
string ans;
int N = s.size();
for(int i = 0;i < N;i++)
{
if(s[i] == ' ')
{
ans.append("%20");
}
else
{
ans.insert(ans.end(), s[i]); //ans.push_back(s[i]);
}
}
return ans;
}
};
使用resize() 原地改变字符串
void resize( size_type count);//根据要求追加或删除元素,为字符串指定新的大小count
void resize( size_type count, value_type char_value);//在需要其他元素时,将追加的字符初始化为char_value
/*
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.5 MB, 在所有 C++ 提交中击败了34.55%的用户
*/
class Solution {
public:
string replaceSpace(string s) {
if(s.empty())
return s;
int cnt = 0;
for(auto x : s)
{
if(x == ' ')
cnt++;
}
int N = s.size();
s.resize(N + cnt * 2);
int i = N - 1,j = s.size() - 1;
while(i != j)
{
if(s[i] == ' ')
{
s[j--] = '0';
s[j--] = '2';
s[j--] = '%';
i--;
}
else
{
s[j--] = s[i--];
}
}
return s;
}
};
这篇博客详细介绍了如何在C++中替换字符串中的空格,探讨了`append()`、`push_back()`和`replace()`等函数在处理字符串时的不同用途,并指出`resize()`方法在原地修改字符串大小以实现空格替换的可行性。
218

被折叠的 条评论
为什么被折叠?



