给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1(需要给出多个测试用例,证明算法的正确性)。
时间: 2024-02-23 08:00:17 浏览: 27
下面是一个用C语言实现的字符串匹配算法,可以在s字符串中找出n字符串出现的第一个位置,如果不存在,则返回-1。
```c
#include <stdio.h>
#include <string.h>
int match(char* s, char* n) {
int slen = strlen(s);
int nlen = strlen(n);
if (slen < nlen) { // 如果s字符串的长度小于n字符串的长度,显然不存在匹配
return -1;
}
for (int i = 0; i <= slen - nlen; i++) { // 枚举s字符串中所有可能的起始位置
int j;
for (j = 0; j < nlen; j++) { // 逐个比较s字符串和n字符串中的字符
if (s[i + j] != n[j]) {
break; // 如果发现不匹配,则退出内层循环,继续枚举下一个起始位置
}
}
if (j == nlen) { // 如果n字符串中的所有字符都匹配成功
return i; // 返回匹配成功的位置
}
}
return -1; // 如果遍历完s字符串中所有可能的起始位置,仍然没有找到匹配,返回-1
}
int main() {
char s1[] = "hello world";
char n1[] = "wor";
printf("s1中n1的位置为: %d\n", match(s1, n1)); // 应该输出 6
char s2[] = "hello world";
char n2[] = "word";
printf("s2中n2的位置为: %d\n", match(s2, n2)); // 应该输出 -1
char s3[] = "hello world";
char n3[] = "hello";
printf("s3中n3的位置为: %d\n", match(s3, n3)); // 应该输出 0
char s4[] = "hello world";
char n4[] = "";
printf("s4中n4的位置为: %d\n", match(s4, n4)); // 应该输出 0
return 0;
}
```
上述代码中,`match`函数为核心函数,其中`s`为s字符串,`n`为n字符串。函数中首先判断s字符串的长度是否小于n字符串的长度,如果是,直接返回-1。然后枚举s字符串中所有可能的起始位置,逐个比较s字符串和n字符串中的字符,如果发现不匹配,则退出内层循环,继续枚举下一个起始位置。如果n字符串中的所有字符都匹配成功,则返回匹配成功的位置;如果遍历完s字符串中所有可能的起始位置,仍然没有找到匹配,则返回-1。最后,我们可以通过多个测试用例来验证这个算法的正确性。