首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-16 
字符串替换插入,寻求高效解决方案是一道面试题:给出一个c type string, 其中一个比如space的地方,替换成一

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

热点排行