c语言 - 是否有原因导致我的 isGeeksForGeeks 的子字符串算法不起作用



是否有我的isSubstring算法不工作的原因?这是相同的算法提供在这里:https://www.geeksforgeeks.org/check-string-substring-another/,但一直返回2,即使他们是相同的子字符串在我的眼睛。

int main()
{
char substring[] = "New York";
char stringVal[] = "Joshua,New York,Engineer";
int M = sizeof(substring);
int N = sizeof(stringVal);
#pragma clang loop unroll(full)
for (int i = 0; i <= N - M; i++) {
int j;
for (j = 0; j < M; j++) {
if (stringVal[i + j] != substring[j]){
break;
}
}

if (j == M) {
printf("%d", 1);
return 1;
}
}
printf("%d", 2);
return -1;
}

这些变量

int M = sizeof(substring);
int N = sizeof(stringVal);

计数也终止字符串的零。

因此在这个for循环中

for (j = 0; j < M; j++) {
if (stringVal[i + j] != substring[j]){
break;
}
}

将字符串substring的终止零''与字符串stringVal的非终止零字符进行比较。

您需要排除终止零,例如

int M = sizeof(substring) - 1;
int N = sizeof(stringVal) - 1;

Or asPaul Sanders指出使用标准C函数strlen甚至更好。

#include <string.h>
//...
int M = strlen(substring);
int N = strlen(stringVal);

size_t

代替int
#include <string.h>
//...
size_t M = strlen(substring);
size_t N = strlen(stringVal);

类型size_t是函数strlen的返回类型,也是操作符sizeof的值类型。

最新更新