c - 我在代码中遇到问题,应该找到字符串中子字符串的出现次数

标签 c arrays string

在下面的代码中,我想查找字符串中子字符串的出现次数以及该子字符串的出现索引。 所以我做了一个 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 , jl .

PS:我是被 C++ 标签引诱到这里的。现在事实证明代码是 C 语言,我无法真正告诉你修复它的最佳方法是什么,但我几乎可以肯定,在 C 语言中你也不必发明一个轮子来查找字符串中的子字符串.

关于c - 我在代码中遇到问题,应该找到字符串中子字符串的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59198215/

相关文章:

C++ 清理字符串函数

c++ - 如何发现Linux系统内存泄漏?

c - 如何在 Linux 上构建信号名称数组?

java - 如何确定重复整数的个数及其个数?

arrays - 动态数组可以用作 Windows 回调函数的参数吗?

java - 特定 url 格式的正则表达式

c - uint8_t 双指针的段错误

c语言printf float错误

java - 如何在java中生成6个不同的随机数

c++ - 如何在不删除的情况下将\x1\x2\x3 ...字符转换为普通字符?