检查子字符串是否存在以及存在于何处

时间:2016-11-04 20:45:49

标签: c string substring strstr

我看到了this的问题,但没有一个答案是我正在寻找的。我试过strstr但它返回一个指针而不是一个整数索引。

我需要查找字符串a是否包含字符串b,如果是,则包含它所在的位置,类似于strcmp返回的索引。是否有功能或简单的方法在C中执行此操作?

例如,如果a为“foobar”且b为“bar”,则此函数/方法将返回3,因为“bar”位于“foobar”的索引3处。

感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

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

(另外,strcmp不会返回索引。)

答案 2 :(得分:0)

你走了:

#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;
}