请教一道常考的面试题

胶水程序员 2009-09-16 09:07:06
最近去应聘嵌入式开发,发现有一道题,基本每一个公司都会考
题目如下:
从一个给定的字符串,例如Student is study,中去掉给定的字符串,例如senu,最后得到的结果是
tdnt i tdy

我是这样做的
char * DeleteStr(char *SrcStr,char *ReplaceStr)
{

char * ResultStr;
int n = strlen(SrcStr);
int j=0;
for(int i = 0;i<n;i++)
{
if(strchr(ReplaceStr,SrcStr)==0)
{
ResultStr[j++] = SrcStr;
}
}
return ResultStr;
}
但面试的都说这种算法用在嵌入式系统中效率太差,因为我之前从没有做过嵌入式系统开发,所以对效率问题不是那么敏感,请诸位指教应该怎么实现好一些
...全文
166 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianya0609 2009-09-16
  • 打赏
  • 举报
回复
学习
liao05050075 2009-09-16
  • 打赏
  • 举报
回复
这个效率低主要体现在
for(i=0;i<n;i++)
strchr(ReplaceStr,SrcStr)
这里的strchr()
你可以增加一个数组,用来标记要去掉的字母,以避免对每个字母都使用strchr()
参加下面

char * DeleteStr(char *SrcStr,char *ReplaceStr)
{
char isDel[26]={0};
int i;
int len,p=0;
len=strlen(ReplaceStr);
for(i=0;i<len;i++) isDel[ReplaceStr[i]-'a']=1;
len=strlen(SrcStr);
for(i=0;i<len;i++)
if(!isDel[SrcStr[i]-'a']) SrcStr[p++]=SrcStr[i];
SrcStr[p]='\0';
return SrcStr;
}
百事烟 2009-09-16
  • 打赏
  • 举报
回复
这个?
#include <stdio.h>
#include <string.h>

int main()
{
char pSrc[] = "456456789 1234456789";
const char *pDst = "456";
int lenDst = strlen(pDst);
char *p = pSrc;
while (*p)
p++;
int nCount = 1;
p -= lenDst;
while (p >= pSrc)
{
if (memcmp(p, pDst, lenDst) == 0)
memcpy(p, p + lenDst , nCount);
p--;
nCount++;
}
printf("%s\n",pSrc);
getchar();
return 0;
}
nli123 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 peonyding 的回复:]
最近去应聘嵌入式开发,发现有一道题,基本每一个公司都会考
题目如下:
从一个给定的字符串,例如Student is study,中去掉给定的字符串,例如senu,最后得到的结果是
tdnt i tdy

我是这样做的
char * DeleteStr(char *SrcStr,char *ReplaceStr)
{

        char * ResultStr;
        int n = strlen(SrcStr);
        int j=0;
        for(int i = 0;i <n;i++)
        {
              if(strchr(ReplaceStr,SrcStr)==0)
              {
                    ResultStr[j++] = SrcStr;
                }
        }
        return ResultStr;
}
但面试的都说这种算法用在嵌入式系统中效率太差,因为我之前从没有做过嵌入式系统开发,所以对效率问题不是那么敏感,请诸位指教应该怎么实现好一些
[/Quote]

效率问题俺不太懂,
可是lz这段代码是不是有不少错误哦?
bxk253387223 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 peonyding 的回复:]
最近去应聘嵌入式开发,发现有一道题,基本每一个公司都会考
题目如下:
从一个给定的字符串,例如Student is study,中去掉给定的字符串,例如senu,最后得到的结果是
tdnt i tdy
[/Quote]
senu是字符串,去掉之后还是Student is study啊,难道我的理解有误!?
whg01 2009-09-16
  • 打赏
  • 举报
回复
Student is study,中去掉senu
得到tdnt i tdy。
写错了吧?
胶水程序员 2009-09-16
  • 打赏
  • 举报
回复
可能我对题意没有说得很清楚,要去掉的不是整个字符串,这样就没有什么难度了,去掉的是这个字符串中出现的每一个字符
5楼的是正解,应聘时他跟我说得算法应该就是这个意思,但没有想过来,谢谢了,分给你

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧