酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

下图给出一种相对独立的定位子串算法: 算法思想是这样的:分别利用计数i和j指示主串s和模式串t中当前正待比较的字符位置。 算法的基本思路是:从主串s的第pos个字符起和模式的第一个字符比较,若相等,则继续逐个比较后续字符,否则从主串的下一个字符起再重新和模式的字符比较。依次类推,直至模式t中的每个字符依次和主串s中的一个连续的字符序列相等,则称匹配成功,函数值为和模式t中第一个字符相等的字符在主串中的序号,否则称匹配不成功,函数值为零。 你的任务是将s中每次比较的字符输出来,并将匹配的序号(从1开始计数)输出。 输入描述 3组字符串,每组字符串占一行。每行包含由空格分隔的两个字符串,字符串仅由英文小写字母组成且长度不大于100。 输出描述 每组数据输出2行,第一行是s中每次比较的字符序列,第二行是后一个字符串在前一个字符串中的位置,如果不匹配,则输出0。 提示 提示: 字符串均用字符数组来表示。题中的图示代码只是求解问题的思想描述,并非能直接运行的函数代码,请自行根据算法思想编写能运行的函数。函数原型必须为: int index(char s[], char t[]

以下是为您编写的 C 语言代码示例: ```c #include <stdio.h> #include <string.h> // 定位子串函数 int index(char s[], char t[]) { int i, j, pos; for (pos = 0; s[pos]!= '\0'; pos++) { // 从主串的每个位置开始比较 i = pos; j = 0; while (s[i]!= '\0' && t[j]!= '\0' && s[i] == t[j]) { // 逐个字符比较 i++; j++; } if (t[j] == '\0') { // 如果模式串匹配完毕 return pos + 1; // 返回匹配位置(从 1 开始计数) } } return 0; // 未匹配返回 0 } int main() { char s[101], t[101]; int cases; scanf("%d", &cases); while (cases--) { scanf("%s %s", s, t); int res = index(s, t); printf("比较的字符序列: "); int i, j, pos; for (pos = 0; s[pos]!= '\0'; pos++) { i = pos; j = 0; while (s[i]!= '\0' && t[j]!= '\0' && s[i] == t[j]) { printf("%c", s[i]); i++; j++; } printf(" "); } printf("\n"); printf("匹配位置: %d\n", res); } return 0; } ``` 额外需要注意的逻辑点: 1. 要注意处理输入字符串为空的情况。 2. 对于字符比较时的边界情况要仔细处理,避免越界访问。 3. 注意内存的合理使用,避免内存泄漏。 [2024-12-15 00:52:00 | AI写代码神器 | 462点数解答]

相关提问