【蓝桥杯算法题】字符串匹配算法

这篇具有很好参考价值的文章主要介绍了【蓝桥杯算法题】字符串匹配算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:用C语言写一个程序,输入一个字符串,过滤此串,只保留字符串中的字母字符,并统计新生成的字符串中包含的字母个数,要求用指针实现。

实现:

#include <stdio.h>
#include <ctype.h>

int filterLetters(char *str);

int main() {
    char str[100];
    printf("请输入一个字符串: ");
    fgets(str, 100, stdin); // 获取用户输入的字符串
    int letters_count = filterLetters(str); // 调用函数过滤字母字符并统计个数
    printf("过滤后的结果为: %s\n", str);
    printf("过滤后的字符串中包含 %d 个字母\n", letters_count);
    return 0;
}

int filterLetters(char *str) {
    char *p1 = str, *p2 = str;
    int count = 0;
    while (*p2 != '\0') {
        if (isalpha(*p2)) { // 判断字符是否为字母
            *p1++ = *p2; // 指针 p1 和 p2 分别指向相同的字母字符
            count++; // 统计字母个数
        }
        p2++; // p2 每次移动指向下一个字符
    }
    *p1 = '\0'; // 将 p1 所在的位置赋值为 NULL,结束字符串
    return count;
}

解释1:

这段代码实现了一个过滤字符串中非字母字符的功能,并统计字母个数。

  • 首先,在主函数中,定义一个长度为100的字符数组str,用fgets函数从标准输入获取用户输入的字符串。
  • 然后调用filterLetters函数,利用指针p1和p2遍历字符串中的每个字符,判断是否为字母字符,
  • 若是,则将其赋值给p1所指向的位置,并让p1指向下一个位置,同时统计字母个数count;
  • 若不是,则直接跳过该字符,继续向后遍历。最后,在filterLetters函数中,将p1所在的位置赋值为NULL,结束字符串,并返回字母个数count。
  • 需要注意的是,isalpha函数是ctype.h头文件中的一个函数,用来判断字符是否为字母,如果是则返回非零值(true),否则返回0(false)。此外,在使用fgets函数时,需要注意输入字符串的长度不要超过数组str的长度,否则会导致数组越界的问题。

解释2:

这段代码的功能是从用户输入的字符串中过滤出字母字符,并统计字母字符的个数,最后输出过滤后的结果和字母字符的个数。

  • 具体来说,代码中首先包含了两个头文件:stdio.h 和 ctype.h。stdio.h 包含了一些标准输入输出函数,而 ctype.h
    包含了一些字符处理函数,例如判断一个字符是否为字母字符。
  • 在 main 函数中,首先定义了一个 char 类型的数组 str,用于存储用户输入的字符串。然后通过 fgets 函数从标准输入流
    stdin 中获取用户输入的字符串,最多读取 100 个字符,将其存储在 str 数组中。
  • 接着调用 filterLetters函数对字符串进行过滤,该函数的作用是将字符串中的字母字符保留下来,并且将它们移动到数组的前面,非字母字符则被忽略掉。该函数返回被保留下来的字母字符的个数。
  • 在 filterLetters 函数中,首先定义两个指针 p1 和 p2,分别指向字符串的开头。然后使用一个 while循环遍历整个字符串,如果当前字符是字母字符,则将其移动到 p1 所指向的位置,并将 p1 后移一位,同时统计字母字符的个数count。如果当前字符不是字母字符,则直接将 p2 后移一位。
  • 最后,在字符串的末尾加上一个 NULL 字符,以表示字符串的结束。在 main 函数中,输出过滤后的结果和字母字符的个数即可。

总之,这段代码实现了一个简单的字符串处理功能,能够对用户输入的字符串进行一定的过滤和统计。文章来源地址https://www.toymoban.com/news/detail-477585.html

到了这里,关于【蓝桥杯算法题】字符串匹配算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字符串匹配-KMP算法

    KMP算法,字符串匹配算法,给定一个主串S,和一个字串T,返回字串T与之S匹配的数组下标。 在学KMP算法之前,对于两个字符串,主串S,和字串T,我们根据暴力匹配,定义两个指针,i指向主串S的起始,j指向字串T的起始,依次比较,如果 主串i位置的值等于子串j位置的值,

    2024年02月14日
    浏览(29)
  • 字符串匹配算法:KMP

    Knuth–Morris–Pratt(KMP)是由三位数学家克努斯、莫里斯、普拉特同时发现,所有人们用三个人的名字来称呼这种算法,KMP是一种改进的字符串匹配算法,它的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。它的时间复杂度是 O(m+n) 字

    2024年02月06日
    浏览(39)
  • 【kmp算法】字符串匹配

    kmp算法解决的是字符串匹配的问题,具体来说假定我们要在主串s[ ] 中匹配模式串p[ ],找到匹配到的位置loc; 最自然的想法是暴力写法 (BF)枚举主串字符s[ i ] ,和模式串p[ j ]。一个一个匹配,如果匹配失败,i指针回退回起点,往前进一位,再次进行比较,知道匹配成功。

    2024年02月04日
    浏览(39)
  • 一些常见的字符串匹配算法

    作者:京东零售 李文涛 字符串匹配在文本处理的广泛领域中是一个非常重要的主题。字符串匹配包括在文本中找到一个,或者更一般地说,所有字符串(通常来讲称其为模式)的出现。该模式表示为p=p[0..m-1];它的长度等于m。文本表示为t=t[0..n-1],它的长度等于n。两个字符串都建

    2023年04月25日
    浏览(21)
  • 字符串匹配算法(BF&&KMP)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 在学习这个算法之前,我们先来看看什么时字符串匹配算法,简单来说 有一个主串和一个子串,查找子串在主串的位置,然后返回这个位置

    2023年04月17日
    浏览(20)
  • 【算法】算法(模拟、指针等)解决字符串类题目(C++)

    字符串题目有很多种,这里筛选几个考察模拟、双指针等的题目,并用相关算法解决。 思路 题意分析 :题目要求找到字符串数组中的最长公共前缀。 解法一 : 两两比较 遍历数组,每次比较后更新最长公共前缀,并循环比较找最长公共前缀 解法二 : 统一比较 遍历第一个

    2024年01月16日
    浏览(28)
  • 28. 找出字符串中第一个匹配项的下标

    给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。

    2024年02月10日
    浏览(20)
  • Leetcode的AC指南 —— 字符串/KMP:28.找出字符串中第一个匹配项的下标

    摘要: Leetcode的AC指南 —— 字符串/KMP:28.找出字符串中第一个匹配项的下标 。题目介绍:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 题目介绍 :给你两

    2024年02月02日
    浏览(37)
  • 探索字符串匹配算法:Rabin-Karp算法

    字符串匹配算法是计算机科学中的重要领域,用于在一个文本字符串中寻找特定的模式。本文将深入介绍Rabin-Karp算法,这是一种常用的字符串匹配算法,适用于在文本中高效地查找特定模式的出现。 Rabin-Karp算法是基于哈希的字符串匹配算法。它的主要思想是使用哈希函数来

    2024年02月11日
    浏览(22)
  • 探索经典算法 拓扑排序,字符串匹配算法,最小生成树

    拓扑排序、字符串匹配算法和最小生成树是计算机科学中常用的数据结构和算法,它们在解决各种实际问题中具有重要的应用价值。在本文中,我将详细介绍这三个主题,并提供相应的示例代码和应用场景,以帮助读者更好地理解和应用这些概念。 一、拓扑排序: 拓扑排序

    2024年02月05日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包