【问题标题】:How to count the appearances of a string within a string?如何计算字符串中字符串的出现次数?
【发布时间】:2012-10-03 01:25:34
【问题描述】:

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

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

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

【问题讨论】:

  • texttriG的内容除了triG的最大长度有什么限制吗?例如,您是否需要在“aaaaaaaaaa”中查找所有出现的“aaa”? ;-)

标签: c string pointers strstr


【解决方案1】:

每次比赛后你都将 x 的值增加了太多。

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

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

【讨论】:

  • 非常感谢...现在对我来说似乎很愚蠢。我猜想对 C 代码进行大量调试。祝大家有个美好的一天:D
  • @IonutGo​​ldan 很高兴这有帮助。如果您对此作为答案感到满意,可以考虑accepting吗?
【解决方案2】:

你有

x+=x+...

你应该有一个

x = x+...

x += ...

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2010-09-21
    • 2020-02-21
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多