请尽快帮助... 编写一个 MIPS 汇编语言程序,提示用户输入两个字符串(每个字符串不应超过 50 个字符,包括空终止符)。您的程序应该确定第二个字符串是否是第一个字符串的子字符串。如果是,那么您的程序应该打印出第一个索引,其中第二个字符串出现在第一个索引中。例如,如果第一个字符串是“Hello World”,第二个字符串是“lo”,那么程序应该打印出 3,即“lo”在“Hello World”中的起始索引。如果第二个字符串不包含在第一个字符串中,那么您的程序应该打印出 -1。
问问题
653 次
1 回答
0
为了能够理解你必须在汇编级别实现什么,你应该做的第一件事就是理解高级算法。为什么?
- 您可以更轻松地及时查看所有案例和边缘案例!
- 回头看看我一直在尝试做什么?在对汇编版本进行编程的过程中。
- 快速查看您(当然)需要哪些变量。
我写了以下程序(原谅我,python 对我来说已经有一段时间了):
def is_in_string_1(string, substring):
"""
aaba: a, b, ab, ba, aba (last one will fail)
"""
length = len(string)
sublength = len(substring)
if (sublength == 0):
return True
j = 0
for i in range(0, length):
if string[i] != substring[j]:
j = 0
else:
j += 1
if j == sublength:
return True
return False
def is_in_string_2(string, substring):
"""
aaba: a, b, ab, ba, aba
"""
length = len(string)
sublength = len(substring)
for i in range(0, length + 1 - sublength): # string: aabc; substring: c; length: 4; sublength: 1; indexes: 0,1,2,3;
is_substring = True
for j in range(0, sublength): # for the sake of the algorithm, no slicing here
if string[i+j] != substring[j]:
is_substring = False
break
if is_substring:
return True
return False
stringTuples = [
("aaa", "aa"),
("aaa", "aaa"),
("aaa", "aab"),
("abc", "bc"),
("abc", "a"),
("abc", "abc"),
("aaa", ""),
("aaa", "b")
]
for stringTuple in stringTuples:
print(
stringTuple[0],
stringTuple[1],
':',
is_in_string_1(stringTuple[0], stringTuple[1]),
is_in_string_2(stringTuple[0], stringTuple[1]),
sep='\t'
)
我首先认为我可以优化标准解决方案(is_in_string_2
),省去第二个 for 循环(is_in_string_1
),但经过一番思考,我已经发现它会失败(边缘情况甚至不在我的任何测试数据中! ) - 所以我把它作为一个例子来说明使用正确算法的重要性。
该程序产生以下输出:
aaa aa : True True
aaa aaa : True True
aaa aab : False False
abc bc : True True
abc a : True True
abc abc : True True
aaa : True True
aaa b : False False
aaba aba : False True
注意所有输出是如何正确的,除了最后一行,第一个算法是错误的。
在继续之前:
于 2020-06-18T14:22:44.893 回答