用指定字符串(如%20)替换空格 时间复杂度为O(n)

#include <iostream>
#include <string>
using namespace std;
void ReplaceBlank(char* destr, const char* sostr, int sLen);

int main()
{
string sostr = "";
getline(cin, sostr);
int len = sostr.length();
int blanLen = 0;
for (int i=0; i<len; i++)
{
if (sostr[i] == ‘ ‘)
blanLen++;
}
const char* sstr = sostr.c_str();
char* destr = new char[2*blanLen + len + 1];
ReplaceBlank(destr,sstr, len+1);
cout<<destr<<endl;
delete [] destr;
return 0;
}

void ReplaceBlank(char* destr, const char* sostr, int sLen)
{
if ((destr != NULL) && (sostr != NULL))
{
int dindex = 0;
for (int sindex= 0; sindex<sLen; )
{
if (sostr[sindex] != ‘ ‘)
{
destr[dindex++] = sostr[sindex++];
}
else
{
destr[dindex++] = ‘%‘;
destr[dindex++] = ‘2‘;
destr[dindex++] = ‘0‘;
sindex++;
}
}
}
}

时间: 2024-08-14 14:46:30

用指定字符串(如%20)替换空格 时间复杂度为O(n)的相关文章

实现函数,用字符串&quot;%20&quot;替换空格

题目及要求: 请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"we are happy.",则输出"we%20are%20happy.". 思考过程:首先将定义一个指针,用于保存"%20",然后定义一个数组,用于接收从键盘上输入的字符串,边输入边判断,如果是空格,则替换,直至接收完毕. 程序: /* *实现一个函数,把字符串中的每个空格替换成"%20". *例如输入"we are 

利用 %20 替换 空格

将字符串中的空格都替换为 %20 ( 时间复杂度为O(N)的解法 ) void ReplaceBlankSpace(char* arr) { if (arr) { int count = 0; int lenth = strlen(arr); for (int i = 0; i < lenth;++i) if (arr[i] == ' ') count++; char*before = arr+lenth, *behind = arr+lenth+2*count; while (before !

编程(用%20替换空格)

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 class Solution { 6 public: 7 void replaceSpace(char *str,int length); 8 }; 9 10 v

4. 替换空格(字符数组)

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为"We Are Happy."则经过替换之后的字符串为"We%20Are%20Happy." 解析 直观的想法是,新建一个数组,逐个复制,遇到空格时,写入%20,但这需要占用额外空间. 如果我们顺序的遍历字符串,当遇到空格时,用%20替换空格,这将覆盖掉空格后面的字符 如果覆盖前,后移剩余字符串,那么移动的时间复杂度为O(n^2). 采用从后往前复制字符的方法.首先统

替换空格--《剑指offer》

如题所示,题目很简单,替换空格,将字符串中的空格替换为%20: 即"we are happy"替换成"we%20are%20happy": 如果每当我们遇到一个空格就将字符串向后平移两位,这样复杂度就是O(n2)了,这样的方法是不可取的,按照作者的来说,offer已不足拿到了: 而当我们反向从字符串末尾开始遍历,复杂度仅为O(n),当然前提的是该字符串有足够空间,否则替换会失败. 了解到思想之后程序也就比较简单了,发现自己的与作者的写的也比较类似,就此贴上了...

Editplus 正则表达式 删除含有指定字符串的行 删除注释

1.删除含有指定字符串的行 替换:  ^.*(指定字符串).*$  为空 例如,删除含有"JOIN"的行, 替换:  ^.*JOIN.*$   为空 2.删除//行注释 替换: //.*$  为空 (需注意,此正则会误删在引号中的'//',  如 'http://www'  ) 3.删除/*...*/段注释 替换: //*.*/n*.*/*/  为空 (需要注意,此正则在Editplus中会有一定的误判,应该是bug,请在替换时单步观察)

《剑指Offer》替换空格(将字符串中的空格替换为%20)

题目: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 思路: 这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换. 看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节.这种解法的时间复杂度为O(n^2)!!! 另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度. 该解

替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

剑指offer替换空格: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路:当我们从前往后进行替换时,每替换一个就要移动后面的所有字符,时间复杂度是0(n2) 我们可以从后向前替换,先统计出所有的空格数space_count,就能得到替换后的长度是length+2*space_count 定义两个指针(可以用下标表示),i指向替换前的最后一个字符下标,j指向替换后的最后一个字符下标

C++用%20替换字符串中的空格(O(n)的时间效率)

#include <iostream> #include <malloc.h> #include <string.h> using namespace std; //将字符串中的空格用%20替换. void Grial(char *str) { if(str==NULL)return ; char *p = str; char *q = NULL; char buf[strlen(str)+1]; int count = 0;//计数空格数. while(*p!='\0