采用顺序结构存储串,用c语言编写一个函数index(s1,s2),用于s2是否是s1的子串,若是,返回其在主串中的位置,否则 返回-1
时间: 2024-02-17 20:02:52 浏览: 54
可以使用以下代码实现:
```c
int index(char s1[], char s2[]) {
int len1 = strlen(s1);
int len2 = strlen(s2);
for (int i = 0; i <= len1 - len2; i++) {
int j;
for (j = 0; j < len2; j++) {
if (s1[i+j] != s2[j]) {
break;
}
}
if (j == len2) {
return i;
}
}
return -1;
}
```
在这个函数中,我们首先获取两个字符串的长度,然后从主串 `s1` 的第一个位置开始遍历,直到剩余的字符串长度小于子串 `s2` 的长度为止。在每个位置上,我们检查该位置开始的子串是否与 `s2` 相同,如果是,我们就返回该位置。如果遍历完整个主串都没有找到子串,我们就返回 `-1`。
相关问题
采用顺序结构存储串,用c语言编写一个函数index(s1,s2),用于s2是否是s1的子串。若是,返回其在主串中的位置;否则返回-1。
好的,下面是一个简单的用C语言实现的index函数,用于判断s2是否是s1的子串,并返回其位置:
```c
int index(char s1[], char s2[]) {
int i, j, k;
int len1 = strlen(s1);
int len2 = strlen(s2);
for (i = 0; i <= len1 - len2; i++) {
k = i;
for (j = 0; j < len2; j++) {
if (s1[k] == s2[j]) {
k++;
} else {
break;
}
}
if (j == len2) {
return i;
}
}
return -1;
}
```
在此函数中,我们使用了两个循环,第一个循环用于遍历s1中所有可能的子串,第二个循环用于判断当前子串是否与s2相同。如果找到了相同的子串,则返回其位置,否则返回-1。
采用顺序结构存储串,用c语言编写一个函数index(s1,s2),用于判断s2是否是s1的子串。若是,则返回其在主串中的位置,否则返回-1。
```
#include <stdio.h>
int index(char s1[], char s2[]) {
int i = 0, j = 0, k = -1;
while (s1[i] != '\0' && s2[j] != '\0') {
if (s1[i] == s2[j]) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
}
if (s2[j] == '\0') {
k = i - j;
}
return k;
}
int main() {
char s1[] = "hello, world!";
char s2[] = "world";
int pos = index(s1, s2);
if (pos != -1) {
printf("'%s' is a substring of '%s' at position %d.\n", s2, s1, pos);
} else {
printf("'%s' is not a substring of '%s'.\n", s2, s1);
}
return 0;
}
```
阅读全文