我们在 C 中做了一些练习(我们必须只使用 stdio.h 库):
编写一个函数,接收两个字符串并返回第二个字符串在第一个字符串中出现的次数,根据循环参数可能存在重叠。
但是我没有成功对待 isCyclic 打开的情况。
例如,如果 isCyclic 不是 0 并且:
字符 *str1 = "aaa"; 字符 *str2 = "aa"; 我们必须返回 3
我在 isCyclic 中的错误是什么?..
这是我的实现:
int strLength(const char *str) {
int count = 0;
while (*str) {
count++;
str++;
}
return count;
}
unsigned int countPatInStr(const char *str1, const char *str2, int isCyclic)
{
int patternSize = strLength(str2);
int textSize = strLength(str1);
int res = 0;
int j;
if (isCyclic) { // Here is the case when overlapping is needed
if (patternSize > textSize) {
for (int i = 0; i < patternSize - textSize; i++) {
for (int j = 0; j < textSize; j++) {
if (str1[j] != str2[i + j]) {
break;
}
if (j == textSize && i + j < patternSize) {
str2 += i + j;
} else if (j == textSize && i + j == patternSize) {
res++;
}
}
}
return 0;
}
} else {
/* A loop to slide pat[] one by one */
for (int i = 0; i <= textSize - patternSize; i++) {
/* For current index i, check for pattern match */
for (j = 0; j < patternSize; j++) {
if (str1[i + j] != str2[j]) {
break;
}
}
// if pat[0...M-1] = txt[i, i+1, ...i+M-1]
if (j == patternSize) {
res++;
}
}
return res;
}
return 0;
}