文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言如何计算子串在字符串中出现的次数

2024-04-02 17:21

关注

这篇文章将为大家详细讲解有关C语言如何计算子串在字符串中出现的次数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

C语言计算子串在字符串中出现的次数

字符串处理在编程中至关重要,而计算子串在字符串中出现的次数是一个常见的任务。C语言提供了多种实现该功能的方法。

方法 1:使用 strstr() 函数

strstr() 函数返回一个指向子串在字符串中首次出现的字符的指针。我们可以使用一个循环来遍历字符串并调用 strstr(),直到它返回 NULL,表明子串不再出现。

int count_occurrences(char *str, char *substr) {
  int count = 0;
  char *ptr = strstr(str, substr);
  while (ptr != NULL) {
    count++;
    ptr = strstr(ptr + 1, substr);
  }
  return count;
}

方法 2:使用 strstr() 和 strncmp() 函数

此方法类似于上述方法,但使用 strncmp() 函数来比较子串和当前字符串位置。

int count_occurrences(char *str, char *substr) {
  int count = 0;
  char *ptr = str;
  while (*ptr != "") {
    if (strncmp(ptr, substr, strlen(substr)) == 0) {
      count++;
      ptr += strlen(substr);
    } else {
      ptr++;
    }
  }
  return count;
}

方法 3:使用 Boyer-Moore 算法

Boyer-Moore 算法是一种高效的字符串搜索算法,特别适合查找单个模式字符串在文本字符串中的出现次数。以下是用 C 语言实现 Boyer-Moore 算法的示例:

#include <stdio.h>
#include <string.h>

int bm_preprocess(char *pattern, int pattern_len, int *last) {
  int i, j;
  for (i = 0; i < 256; i++) {
    last[i] = -1;
  }
  for (j = 0; j < pattern_len; j++) {
    last[pattern[j]] = j;
  }
}

int bm_search(char *text, int text_len, char *pattern, int pattern_len, int *last) {
  int i, j;
  j = pattern_len - 1;
  while (j < text_len) {
    i = pattern_len - 1;
    while (i >= 0 && pattern[i] == text[j]) {
      i--;
      j--;
    }
    if (i < 0) {
      return j + 1;
    } else {
      j += pattern_len - 1 - last[text[j]];
    }
  }
  return -1;
}

int count_occurrences(char *str, char *substr) {
  int last[256];
  int count = 0;
  bm_preprocess(substr, strlen(substr), last);
  int index = bm_search(str, strlen(str), substr, strlen(substr), last);
  while (index >= 0) {
    count++;
    index = bm_search(str + index, strlen(str) - index, substr, strlen(substr), last);
  }
  return count;
}

选择合适的算法

算法的选择取决于字符串和子串的长度以及要处理的字符串数量。对于短字符串和少量出现,方法 1 或 2 通常就足够了。对于较长的字符串和大批量出现,Boyer-Moore 算法提供了更高的效率。

以上就是C语言如何计算子串在字符串中出现的次数的详细内容,更多请关注编程学习网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     436人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     201人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     163人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     242人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     68人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯