6-2 实验10_4_设计函数 locatesubstr
时间: 2023-06-19 18:08:52 浏览: 88
函数功能:在一个字符串中查找另一个字符串第一次出现的位置。
函数原型:`int locatesubstr(char* str1, char* str2)`
输入参数:
- `str1`:指向要查找的字符串的指针;
- `str2`:指向要在 `str1` 中查找的子字符串的指针。
输出参数:无。
返回值:
- 如果 `str2` 是 `str1` 的子字符串,则返回 `str2` 在 `str1` 中第一次出现的位置;
- 如果 `str2` 不是 `str1` 的子字符串,则返回 `-1`。
实现思路:
- 遍历 `str1` 中的每一个字符;
- 对于 `str1` 中的每一个字符,从该字符开始逐个与 `str2` 中的字符比较;
- 如果 `str1` 中的某个位置开始与 `str2` 完全匹配,则返回该位置;
- 如果遍历完 `str1` 都没有找到匹配的位置,则返回 `-1`。
函数实现:
```c
int locatesubstr(char* str1, char* str2)
{
int len1 = strlen(str1), len2 = strlen(str2); // 计算 str1 和 str2 的长度
for (int i = 0; i < len1 - len2 + 1; i++) { // 遍历 str1 的每个字符
int j;
for (j = 0; j < len2; j++) { // 从 str1 的当前位置开始逐个与 str2 比较
if (str1[i+j] != str2[j]) { // 如果有不同的字符,则退出循环
break;
}
}
if (j == len2) { // 如果 str2 中的所有字符都与 str1 中的某一段匹配,则返回该位置
return i;
}
}
return -1; // 如果遍历完 str1 都没有找到匹配的位置,则返回 -1
}
```
注意事项:
- 在比较两个字符串时,要逐个比较它们的字符,而不能直接使用 `==` 运算符比较整个字符串。
- 在遍历 `str1` 时,只需要遍历到 `len1 - len2` 的位置,因为如果 `str1` 的剩余部分的长度小于 `str2` 的长度,那么肯定无法与 `str2` 匹配。
- 在比较完 `str2` 中的所有字符时,要判断 `j` 是否等于 `len2`,如果等于,则说明 `str2` 完全匹配了 `str1` 中的某一段,此时应该返回该位置;如果不等于,则说明 `str2` 没有匹配成功,需要继续遍历 `str1`。