在下面的代码中,我想查找字符串中子字符串的出现次数以及该子字符串的出现索引。 所以我做了一个 while 循环,如果发现相同的字符增加 i 和 j,那么如果输入的子字符串的 i % 长度计数增加。所以当我运行它时,程序不会终止。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 256
int main()
{
char line[MAX];
char word[MAX];
int l , w ;
int i=0, j=0 ,count=0 ;
fgets(line , MAX,stdin);
fgets(word,MAX,stdin);
l = strlen(line);
w = strlen(word);
while(i < l){
if((line[i]==word[j])){
i++ ;
j++ ;
}
if( (i+1) % (w-1) == 0){
printf("Occurrence at index %d",(i-w+2));
count++ ;
}
}
printf("Total number of occurrences = %d",count);
return 0;
}
最佳答案
while 循环的条件是 i < l
。您不修改l
在循环。唯一可以增加 i
的地方是
if((line[i]==word[j])){
i++ ;
j++ ;
}
如果您曾经遇到过 line[i] != word[j]
的迭代那么 while 循环将永远不会停止,因为在 if
之外你永远不会修改i
, j
或l
.
PS:我是被 C++ 标签引诱到这里的。现在事实证明代码是 C 语言,我无法真正告诉你修复它的最佳方法是什么,但我几乎可以肯定,在 C 语言中你也不必发明一个轮子来查找字符串中的子字符串.
关于c - 我在代码中遇到问题,应该找到字符串中子字符串的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59198215/