有S=“abcdaabc”,T=”aab”,编程查找T在S中的位置。用数据结构 用C语言
时间: 2024-10-20 20:06:38 浏览: 13
在C语言中,要解决这个问题,我们可以使用滑动窗口算法结合字符串处理。滑动窗口可以有效地在一个较长的字符串中查找某个模式串的位置。这里是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
int findPattern(char *str1, char *str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len2 > len1)
return -1; // 如果模式串比原始字符串长,找不到
int i = 0, j = 0;
while (i < len1 && j < len2) {
if (str1[i] == str2[j])
i++, j++;
else
i = i - j + 1; // 当字符不匹配时,移动左边界回溯
}
if (j == len2) // 如果完全匹配,则返回起始位置
return i - j;
else
return -1; // 没有找到
}
int main() {
char S[] = "abcdaabc";
char T[] = "aab";
int position = findPattern(S, T);
if (position != -1)
printf("Pattern found at index %d\n", position);
else
printf("Pattern not found in the string.\n");
return 0;
}
```
在这个例子中,`findPattern`函数接收两个字符串作为输入,它会从头开始比较,如果遇到不匹配的情况,会将左指针(i)回溯到当前位置加上已匹配的字符数。如果模式串完全匹配,就返回起始位置;否则返回-1表示未找到。
阅读全文