gpt4 book ai didi

c - 在较大的字符串中查找子字符串的第一个字符的位置

转载 作者:行者123 更新时间:2023-12-04 10:49:42 30 4
gpt4 key购买 nike

所以我的问题是我需要使用 for 循环在较大的字符串中找到子字符串的数字位置。我不能使用 strstr 之类的字符串函数,并且我已经尝试了大多数嵌套 for 循环的迭代。

基本上我需要一个循环来遍历字符串以查找特定的子字符串,如果它与第一个字符匹配,则检查其余字符是否也匹配。

如果全部匹配,则返回子串第一个字符的位置,如果没有找到,则返回-1。

非常感谢任何帮助。谢谢!

最佳答案

正如您正确描述的那样,这可以通过 2 个嵌套循环来完成:

#include <stdlib.h>  // for size_t

int indexof(const char *str, const char *substr) {
for (size_t i = 0;; i++) {
/* for every position in the string */
for (size_t j = 0;; j++) {
/* check of all characters fro substr match at this offset */
if (substr[j] == '\0') {
/* if we reach the end of substr, we have a match at offset i */
return i;
}
if (str[i + j] != substr[j]) {
/* if there is a mismatch, stop checking and skip to the next offset */
break;
}
}
if (str[i] == '\0') {
/* no match found: return -1 */
return -1;
}
}
}

注意事项:

  • 该函数被指定为返回 int,因为它返回 -1 表示没有匹配项。然而,匹配的偏移量可能不在 int 的范围内。如果可以访问超过 2GB 的数据,返回 POSIX 中定义的签名类型(例如 ssize_t)将无法完全解决 32 位系统上的此问题。

  • 通过显式测试子字符串的第一个字符,可以使该函数更快一些。

  • 对于长字符串和子字符串,更高级的算法如Boyer Moore'sKnuth Morris Pratt's可以运行得更快。

关于c - 在较大的字符串中查找子字符串的第一个字符的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557996/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com