采用顺序结构存储串,编写一个函数index(s1,s2),用于判断s2是否是s1的子串。若是,则返回其在主串中的位置,否则返回-1。
时间: 2024-05-09 07:20:54 浏览: 60
以下是Python实现:
```python
def index(s1, s2):
n = len(s1)
m = len(s2)
for i in range(n-m+1):
j = 0
while j < m and s1[i+j] == s2[j]:
j += 1
if j == m:
return i
return -1
```
其中,n和m分别为主串和子串的长度。通过循环遍历主串中每一个可能的起始位置,并在每个位置上逐个比较子串中的字符和主串中对应位置的字符是否相等,直到找到子串完全匹配主串的一段位置,或者遍历完所有可能的位置都没有找到匹配的子串。如果找到匹配的子串,则返回其在主串中的起始位置。如果遍历完所有可能的位置都没有找到匹配的子串,则返回-1表示未找到。
相关问题
利用index()函数和删除子串函数循环实现采用顺序结构存储串,编写一个函数 index(n1,s2),用于判断 s2 是否是 s1的子串若是,则返回其在主串中的位置,否则返回-1
def index(n1, s2):
i = 0
while i < len(n1):
j = 0
k = i
while j < len(s2) and k < len(n1) and s2[j] == n1[k]:
j += 1
k += 1
if j == len(s2):
return i
i += 1
return -1
# 测试
s1 = "hello world"
s2 = "world"
print(index(s1, s2)) # 输出 6
s3 = "hello world"
s4 = "python"
print(index(s3, s4)) # 输出 -1
采用顺序结构存储串,用c语言编写一个函数index(s1,s2),用于判断s2是否是s1的子串。若是,则返回其在主串中的位置,否则返回-1。
```
#include <stdio.h>
#include <string.h>
int index(char s1[], char s2[]) {
int len1 = strlen(s1);
int len2 = strlen(s2);
int i, j;
for (i = 0; i <= len1 - len2; i++) {
for (j = 0; j < len2; j++) {
if (s1[i + j] != s2[j]) {
break;
}
}
if (j == len2) {
return i;
}
}
return -1;
}
int main() {
char s1[] = "hello world";
char s2[] = "world";
int pos = index(s1, s2);
if (pos == -1) {
printf("%s is not a substring of %s.\n", s2, s1);
} else {
printf("%s is a substring of %s, starting at position %d.\n", s2, s1, pos);
}
return 0;
}
```
阅读全文