是否有我的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
的值类型。