检查子字符串是否存在以及存在的位置
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;
}
我看到了 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;
}