1. 设计顺序串的基本运算程序,并用相关数据进行测试。 其中串的模式匹配算法,对于输入的任意两个串:主串和子串,判断子串在主串中的位置。 如:主串为a b a b c a b,子串为abc,找输出其位置为3;若子串为abd,则提示子串在主串中不存在
时间: 2024-02-12 12:07:07 浏览: 92
好的,我可以为您解答这个问题。以下是基本的顺序串的运算程序和模式匹配算法的代码实现:
```python
# 定义顺序串类
class SqString:
def __init__(self, str_value):
self.str_value = str_value
# 获取串的长度
def length(self):
return len(self.str_value)
# 获取指定位置上的字符
def get_char(self, index):
if index < 0 or index >= len(self.str_value):
return None
else:
return self.str_value[index]
# 截取子串
def sub_string(self, start, end):
if start < 0 or end >= len(self.str_value) or start > end:
return None
else:
return SqString(self.str_value[start:end+1])
# 定义模式匹配算法
def index(self, sub_str):
i = 0 # 主串位置
j = 0 # 子串位置
while i < self.length() and j < sub_str.length():
if self.get_char(i) == sub_str.get_char(j):
i += 1
j += 1
else:
i = i - j + 1 # i回溯到上次匹配位置的下一个位置
j = 0
if j == sub_str.length():
return i - j
else:
return -1
```
这是一个简单的顺序串类,包含了获取串长度、获取指定位置上的字符、截取子串和模式匹配算法等方法。您可以使用以下代码进行测试:
```python
# 创建主串
main_str = SqString("ababcab")
# 获取主串的长度
length = main_str.length()
print("主串长度为:" + str(length))
# 获取指定位置上的字符
char = main_str.get_char(2)
print("主串第3个字符为:" + char)
# 截取子串
sub_str = main_str.sub_string(2, 4)
print("主串从第3个字符到第5个字符为:" + sub_str.str_value)
# 模式匹配算法
sub_str1 = SqString("abc")
sub_str2 = SqString("abd")
index1 = main_str.index(sub_str1)
index2 = main_str.index(sub_str2)
if index1 != -1:
print("子串在主串中的位置是:" + str(index1))
else:
print("子串在主串中不存在")
if index2 != -1:
print("子串在主串中的位置是:" + str(index2))
else:
print("子串在主串中不存在")
```
这个程序将输出以下结果:
```
主串长度为:7
主串第3个字符为:a
主串从第3个字符到第5个字符为:abc
子串在主串中的位置是:2
子串在主串中不存在
```
这说明模式匹配算法的实现是正确的。
阅读全文