为什么我的 GeeksforGeeks 的 isSubstring 算法不工作是有原因的
is there a reason why my isSubstring algorithm from GeeksforGeeks isn't working
为什么我的 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
的终止零 '[=16=]'
与字符串 stringVal
.
的非终止零字符进行比较
您需要排除终止零,例如
int M = sizeof(substring) - 1;
int N = sizeof(stringVal) - 1;
或者正如 Paul 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
是函数的return类型strlen
和运算符的值的类型sizeof
.
为什么我的 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
的终止零 '[=16=]'
与字符串 stringVal
.
您需要排除终止零,例如
int M = sizeof(substring) - 1;
int N = sizeof(stringVal) - 1;
或者正如 Paul 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
是函数的return类型strlen
和运算符的值的类型sizeof
.