字符串替换插入,寻求高效解决方案
是一道面试题:
给出一个c type string, 其中一个比如space的地方,替换成一个pattern,这个题目难点就是这个pattern是多于一个char,怎么做比较efficient比如 “ab cd ef g” the replace pattern is "*&^" then the answer should be:
ab*&^cd*&^ef*&^g.
[解决办法]
我觉得要高效的解决办法的话链表应该不失为一个好办法,定义一个要替换空格的符号字符串 char sign[] = {'*','&','^'};
然后用字符指针在原字符串中循环,如果遇到下一个字符是空格,将sign副本的尾指向本字符的next的next,再将本字符的指针域指向sign的副本的首地址,如此循环...
[解决办法]
既然是c type string,空间连续,那应该不能用链表了吧。
有个费空间的办法:
先定义一个足够的空间,以次把字符填进去,遇到空格就替换,时间复杂性o(n)
[解决办法]
一个很烂的代码,仅供参考#include "iostream"using namespace std;void replace(char str[], const char pat[]){ char temp[128]; char* ps = str; char* pt = temp; while ((*ps) && pt < &temp[128]) { if ((*ps) == ' ') { strcpy(pt, pat); pt += strlen(pat); } else { (*pt++) = (*ps); } ++ps; } (*pt) = 0; strcpy(str, temp);}int main(){ char str[128] = "ab cd ef g"; char pat[] = "*&^"; replace(str, pat); cout<<str<<endl; return 0;}