【问题标题】:How to find the number of common characters of two input strings in Assembly? [closed]如何在Assembly中找到两个输入字符串的公共字符数? [关闭]
【发布时间】:2016-12-02 13:34:09
【问题描述】:

我需要比较两个输入字符串并在 Assembly 中显示常用字符的数量,但我不知道该怎么做。

【问题讨论】:

  • 1.你试过什么了? StackOverflow 不是一个“做我的功课”的网站。 2. 您为哪种架构编写汇编代码?
  • 你会如何使用高级语言?基本算法不会在它和汇编之间改变。不清楚你在问什么。
  • 当我想统计汇编中常见字符的个数时,我一般会写一些代码。 :)

标签: string algorithm assembly


【解决方案1】:

要有效地做到这一点,您需要某种数据结构来记住您已经看过哪些字符。

如果您不介意重复并且不需要效率,您可以遍历第一个字符串,并且对于每个字符,遍历第二个字符串并比较它们(当它们匹配时将一个添加到寄存器或变量中)。

【讨论】:

  • 对于 ASCII,一个包含 256 个条目的存在/不存在数组很容易从一个字符串创建,然后检查另一个字符串的每个字符。要进行重复数据删除,请在打印后将存在条目设置回零。有趣的小算法设计问题。 asm 中的实际实现很简单,对我来说根本不是这个问题的有趣部分。很高兴您只需要常用字符的数量,根本不需要打印它们,更不用说以任何顺序。我也几乎想回答它,即使认为这是一个可怕的问题,我们不应该奖励懒惰的“做我的功课”问题。
  • ASCII 很简单,除非您使用大量内存,否则 Unicode(UTF-8、16 或 32)就没那么简单了。此外,要找到正确的算法,您需要准确地说明问题,即在编写代码之前知道给定输入的输出 à la TDD。那么如果将 ABBA 与 BABA 进行比较,您期望 2(A&B)、4(先 A 两次,先 B 两次)还是 8(2*2+2*2)?
  • 关于是否重复计算的好点,没想到。
  • 用 asm 中的字符做任何事情的家庭作业总是在谈论 ASCII 字节。即使有大量内存,仅解码像 UTF-8(或 UTF-16,现在 unicode 已经超过 16 位)这样的可变长度编码也会非常复杂。但是,是的,使用 UTF-32 就这么简单,至少在 64 位系统上,您可以轻松拥有 4G 阵列。
  • 假设它是 ASCII 并且您想忽略重复项,我将使用两个 256 位字,解析第一个字符串并将第一个字的位设置为 1 找到的每个字符。我会对第二个单词和第二个字符串做同样的事情,然后在两个单词之间做一个二进制与。
猜你喜欢
  • 1970-01-01
  • 2019-11-24
  • 2010-09-25
  • 2013-09-13
  • 2011-02-15
  • 2010-12-27
相关资源
最近更新 更多