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

sdyqingdao 2008-03-09 01:40:44
是一道面试题:
给出一个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.
...全文
167 10 打赏 收藏 转发到动态 举报
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xbt746 2008-03-10
  • 打赏
  • 举报
回复
顶楼上
  • 打赏
  • 举报
回复
#include<iostream>
#include<cstring>
using namespace std;
void replace(char *s,char *buf,char ch,char *p)
{
char temp[1024]={0};
char *t=temp;
int nLen=strlen(p);
while(*s){
if(*s==ch){
strcpy(t,p);
++s;
t+=nLen;
continue;
}
*t++=*s++;
}
strcpy(buf,temp);
}
int main(void)
{
char s[]="1 23 4 56 78 9";
char str[64];
replace(s,str,' ',"jimmy");
cout<<str<<endl;
system("pause");
return 0;
}


大概这样吧。。。
michney 2008-03-09
  • 打赏
  • 举报
回复
正则的效率应该不如自己写的算法吧?
野男孩 2008-03-09
  • 打赏
  • 举报
回复
大概没啥巧方法,用正则表达式比较快捷,效率应该也可以接受
星羽 2008-03-09
  • 打赏
  • 举报
回复

一个很烂的代码,仅供参考

#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;
}
追忆 2008-03-09
  • 打赏
  • 举报
回复
你看可不可以用vector迭代器,在每个对象之间加上pattern,应为迭代器遇到space就停止了,你可以试试看!
hityct1 2008-03-09
  • 打赏
  • 举报
回复
既然是c type string,空间连续,那应该不能用链表了吧。
有个费空间的办法:
先定义一个足够的空间,以次把字符填进去,遇到空格就替换,时间复杂性o(n)
舉杯邀明月 2008-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
用正则式...
[/Quote]

 嘻嘻……叫“郑则仕”来 ^_^
baihacker 2008-03-09
  • 打赏
  • 举报
回复
用正则式...
HengStar 2008-03-09
  • 打赏
  • 举报
回复
我觉得要高效的解决办法的话链表应该不失为一个好办法,定义一个要替换空格的符号字符串 char sign[] = {'*','&','^'};
然后用字符指针在原字符串中循环,如果遇到下一个字符是空格,将sign副本的尾指向本字符的next的next,再将本字符的指针域指向sign的副本的首地址,如此循环...
相关推荐

63,596

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下