首页
社区
课程
招聘
[原创]一道字符串转换面试题的汇编实现及简要注释
发表于: 2007-12-6 13:01 7397

[原创]一道字符串转换面试题的汇编实现及简要注释

HSQ 活跃值
8
2007-12-6 13:01
7397

这是我在其它论坛上看到的一道面试,由于没有放出答案.虽然没有什么难度,但自认为有点意思,就花了半个小时做了一下. 可能不是很符合要求,最小内存的情况我几乎没有考虑. 其实是自己认为没有必要对于字符串转换想办法减少内存,把过程搞得太复杂,即使是处理串有N大(比喻有100M以上),进行分批处理也能解决内存紧张的问题. 有更好实现的欢迎赐教


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
先下载,再慢慢看
2007-12-6 14:05
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
3
没仔细看你的代码,总之算法复杂度是O(n)就对了
2007-12-6 18:30
0
雪    币: 324
活跃值: (91)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
看了你两篇帖子,很不错!
2007-12-19 12:55
0
雪    币: 1126
活跃值: (156)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
5
没事看精华的时候看到这个。最小空间是不需要新分配空间
具体算法步骤:
1。将字符串反转;
2。将每个单词反转;

//这个函数好像C语言库里面就有,没有自己写一个也很简单啦
void strrev(char *p)
{
char *p1, *p2, c;
p1 = p; p2 = p + strlen(p)-1;
while (p1 < p2)
{
  c = *p1;
  *p1 = *p2;
  *p2 = c;
  p1++;
  p2--;
}
}

void main()
{
char p[] = "HE□IS□A□GOOD□BOY";
strrev(p);

char *p1= p;
while (*p1 != 0)
{
  char *p2 =   strstr(' ', p1);
  if (p2 != NULL)
  {
    *p2 = 0;
  }
  strrev(p1);
  if (p2 == NULL)
  {
     break;
  }  
  p1 = p2 + 1;
}
}

/*
0:HE□IS□A□GOOD□BOY
1:YOB□DOOG□A□SI□EH
2:BOY□GOOD□A□IS□HE
*/
2008-2-20 14:00
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
6
写不出什么好代码,老了唉
; input: esi = source, edi = buffer, ecx = length
  add     edi, ecx
  xor     ecx, ecx
L002:
  mov     al, [ecx+esi]
  cmp     al, 20
  je      L009
  cmp     al, 0
  je      L009
  inc     ecx
  jmp     L002
L009:
  sub     edi, ecx
  push    edi
  rep     movsb
  pop     edi
  lodsb
  test    al, al
  je      L020
  dec     edi
  stosb
  dec     edi
  jmp     L002
L020:
  retn
2008-2-21 01:52
0
游客
登录 | 注册 方可回帖
返回
//