检查子字符串是否存在以及存在的位置

Check if and where a substring exists

我看到了 this 个问题,但 none 个答案正是我想要的。我试过 strstr 但它 return 是一个指针而不是整数索引。

我需要查找字符串 a 是否包含字符串 b,如果是,它位于何处,有点像 return 由 strcmp 编辑的索引。在 C 中是否有一个函数或简单的方法可以做到这一点?

例如,如果 a 是 "foobar" 并且 b 是 "bar",那么这个 function/method 将 return 3 因为 "bar" 位于 "foobar" 的索引 3。

感谢任何帮助!

您可以通过减去指向字符串开头的指针,轻松地将 returned 指针转换为索引,a:

char *p = strstr(a, b);
int i = p ? p - a : -1;

(此外,strcmp 没有 return 索引。)

您可以使用 strstr 以及一些指针算法。

char *result = strstr(a, b);
if (result != NULL) {
    printf("index = %tu\n", result - a);
}

此处,result 指向 a 之前的特定字节数。所以如果你减去这两个,那就是你的指数。

给你:

#include <stdio.h>
#include <string.h>

int main()
{
    char str1[]="foobar";
    char str2[]="bar";
    char *ptr;
    if((ptr = strstr(str1, str2)) != NULL) {
        printf("Start offset: %td\n", ptr - str1);
    }

    return 0;
}