c - 如何计算字符串中字符串的出现次数?

标签 c string pointers strstr

我必须计算一个特定的 C 字符串在一个更大的字符串中出现的次数。我正在使用 strstr() 函数通过大 C 字符串使用 char 指针进行计数和前进。问题是它似乎计数太少,就像文本的减少越来越快,跳过大块字符。我正在使用一个名为“x”的 int 类型变量来从左到右“减少”文本,但我不知道分配新值是否存在问题。

int x=0;
while((p=strstr(text+x,triG))!=NULL)
{
    v[i]++;
    x+=x+3+(p-(text+x));
}

text 是 char* 类型,动态分配。 triG是char[4]类型,p是char*类型。

最佳答案

您在每次匹配后将 x 的值增加太多。

int x=0;
while((p=strstr(text+x,triG))!=NULL)
{
    v[i]++;
    x = p - text + strlen(triG);
}

您还可以简化x 的计算。您同时添加和删除了 x - 这些抵消了。使用 strlen(triG) 而不是硬编码假设它总是 4 也更灵活一些。

关于c - 如何计算字符串中字符串的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12855515/

相关文章:

python - 将字符串数组中的元素输出到句子

regex - 如何在 Ruby 字符串中替换正则表达式匹配之外的内容?

c - 从包含空格的文件中读取字符串并在 C 中搜索文件中的给定字符串

C 解引用指针

c - 如何使用 BFS 查找 C 图中两个顶点之间的所有最短路径?

c - 如何仅从其名称调用库函数?

c - 使用 char **,将 char ** 初始化为 C 中的字符串数组

for-loop - 在 for 循环中使用指针

编译器不显示显式转换的警告消息

c - 如何加速这个墨西哥代码?