C语言算法-解答找出字符串中第一个匹配项的下标问题的C语言实现
题目
给定一个字符串 str
和一个子串 subStr
,需要在字符串 str
中找到第一个匹配子串 subStr
的位置,并返回其下标。如果子串不存在于字符串中,则返回 -1。
引言
找出字符串中第一个匹配项的下标问题需要考虑字符串的匹配和遍历的逻辑。我们可以使用暴力匹配的方法来解决这个问题,逐个字符地比较字符串和子串。解决这个问题需要对字符串进行匹配和遍历操作。
算法思路
我们将使用暴力匹配的方法来解决找出字符串中第一个匹配项的下标问题。
算法的步骤如下:
- 获取字符串
str
和子串subStr
的长度。 遍历字符串
str
,从第一个字符开始,直到str
的长度减去subStr
的长度:- 在每个位置上,比较字符串
str
的子串(长度与subStr
相等)和子串subStr
是否相等。 - 如果相等,返回当前位置作为第一个匹配项的下标。
- 在每个位置上,比较字符串
- 如果遍历结束后仍然没有找到匹配项,返回 -1。
代码实现
下面是使用C语言实现的代码:
#include <stdio.h>
#include <string.h>
int findFirstMatchIndex(char* str, char* subStr) {
int strLen = strlen(str);
int subStrLen = strlen(subStr);
for (int i = 0; i <= strLen - subStrLen; i++) {
int j;
for (j = 0; j < subStrLen; j++) {
if (str[i + j] != subStr[j]) {
break;
}
}
if (j == subStrLen) {
return i;
}
}
return -1;
}
int main() {
char str[] = "Hello, world!";
char subStr[] = "world";
int index = findFirstMatchIndex(str, subStr);
printf("String: %s\n", str);
printf("Substring: %s\n", subStr);
if (index != -1) {
printf("First match found at index: %d\n", index);
} else {
printf("Substring not found\n");
}
return 0;
}
算法分析
该算法需要对字符串进行一次遍历,并在每个位置上进行字符串匹配,所以时间复杂度为 O(n * m),其中 n 是字符串 str
的长度,m 是子串 subStr
的长度。
空间复杂度为 O(1),算法只使用了常数级别的额外空间。
示例和测试
示例输入:
String: Hello, world!
Substring: world
示例输出:
First match found at index: 7
总结
本文使用C语言实现了解答找出字符串中第一个匹配项的下标问题的代码。通过使用暴力匹配的方法,我们能够在字符串中找到第一个匹配的子串,并返回其下标位置。该算法的时间复杂度为 O(n * m),空间复杂度为 O(1)。