读书人

字符串替换插入寻求高效解决方案,该

发布时间: 2012-03-16 16:34:56 作者: rapoo

字符串替换插入,寻求高效解决方案
是一道面试题:
给出一个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)
[解决办法]

C/C++ code
一个很烂的代码,仅供参考#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;} 

读书人网 >C++

热点推荐