C语言统计输入字符各个字母出现频率的解题思路

yizhihongxing

当然!下面是关于\"C语言统计输入字符各个字母出现频率的解题思路\"的完整攻略:

C语言统计输入字符各个字母出现频率的解题思路

... 示例1:使用数组统计字母频率

#include <stdio.h>

int main() {
    char str[100];
    int count[26] = {0}; // 初始化计数数组

    printf(\"请输入一个字符串:\");
    fgets(str, sizeof(str), stdin);

    for (int i = 0; str[i] != '\\0'; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            count[str[i] - 'a']++;
        } else if (str[i] >= 'A' && str[i] <= 'Z') {
            count[str[i] - 'A']++;
        }
    }

    for (int i = 0; i < 26; i++) {
        if (count[i] > 0) {
            printf(\"%c 出现的次数为 %d\
\", 'a' + i, count[i]);
        }
    }

    return 0;
}

在这个示例中,我们首先定义了一个字符数组str来存储输入的字符串,以及一个整型数组count来统计字母出现的频率。然后,我们使用fgets函数从标准输入中获取字符串。接下来,我们使用一个循环遍历字符串中的每个字符,如果字符是小写字母,则将对应的计数数组元素加1;如果字符是大写字母,则同样将对应的计数数组元素加1。最后,我们再次使用循环遍历计数数组,打印出每个字母出现的次数。

... 示例2:使用哈希表统计字母频率

#include <stdio.h>
#include <stdlib.h>

struct Node {
    char letter;
    int count;
    struct Node* next;
};

int main() {
    char str[100];
    struct Node* hashTable[26] = {NULL}; // 初始化哈希表

    printf(\"请输入一个字符串:\");
    fgets(str, sizeof(str), stdin);

    for (int i = 0; str[i] != '\\0'; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            int index = str[i] - 'a';
            struct Node* node = hashTable[index];
            while (node != NULL) {
                if (node->letter == str[i]) {
                    node->count++;
                    break;
                }
                node = node->next;
            }
            if (node == NULL) {
                struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
                newNode->letter = str[i];
                newNode->count = 1;
                newNode->next = hashTable[index];
                hashTable[index] = newNode;
            }
        } else if (str[i] >= 'A' && str[i] <= 'Z') {
            int index = str[i] - 'A';
            struct Node* node = hashTable[index];
            while (node != NULL) {
                if (node->letter == str[i]) {
                    node->count++;
                    break;
                }
                node = node->next;
            }
            if (node == NULL) {
                struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
                newNode->letter = str[i];
                newNode->count = 1;
                newNode->next = hashTable[index];
                hashTable[index] = newNode;
            }
        }
    }

    for (int i = 0; i < 26; i++) {
        struct Node* node = hashTable[i];
        while (node != NULL) {
            printf(\"%c 出现的次数为 %d\
\", node->letter, node->count);
            node = node->next;
        }
    }

    return 0;
}

在这个示例中,我们首先定义了一个结构体Node来表示哈希表中的节点,包含字母和出现次数。然后,我们定义了一个指针数组hashTable来作为哈希表,初始化为NULL。接下来,我们使用fgets函数从标准输入中获取字符串。然后,我们使用一个循环遍历字符串中的每个字符,如果字符是小写字母,则根据哈希函数计算出对应的索引,然后遍历哈希表中的链表,如果找到相同的字母,则将对应的计数加1;如果没有找到相同的字母,则创建一个新的节点,并将其插入到链表的头部。如果字符是大写字母,同样进行相同的操作。最后,我们再次使用循环遍历哈希表,打印出每个字母出现的次数。

希望这个攻略对你有所帮助!如果你还有其他问题,请随时提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言统计输入字符各个字母出现频率的解题思路 - Python技术站

(0)
上一篇 2023年8月19日
下一篇 2023年8月19日

相关文章

  • springboot实现用户名查找用户功能

    下面是针对“springboot实现用户名查找用户功能”的完整攻略。 1. 前提条件 在开始实现用户名查找用户功能之前,需要满足以下前提条件: 安装好Java开发环境以及Maven构建工具; 熟悉Spring的基本概念和使用方式; 了解Spring Boot的基本原理和特点。 2. 实现步骤 接下来我将逐步讲解如何使用Spring Boot实现用户名查找用户…

    other 2023年6月27日
    00
  • Win10系统KB3081424累积补丁更新后出现反复重启的BUG

    标题:Win10系统KB3081424累积补丁更新后出现反复重启的BUG 正文: 最近有许多Win10用户在安装KB3081424累积补丁更新后遇到了反复重启的问题。该问题主要出现在Win10系统版本为10586的设备上,具体表现为电脑会在反复重启几次之后自动恢复到更新前的状态。接下来将会详细讲解解决该问题的攻略,供用户参考。 1. 恢复到更新前的状态 如果…

    other 2023年6月27日
    00
  • MIP经典问题:旅行商问题 (traveling salesman problem)

    MIP经典问题:旅行商问题 (Traveling Salesman Problem) 旅行商问题(Traveling Salesman Problem,缩写为TSP)是一个经典的组合优化问题,它的目标是在已知的一组城市之间寻找一条路径,使得旅行商可以最小化旅行的总路程并回到出发城市。 问题描述 问题的输入是一组城市,这些城市之间的距离是已知的。旅行商需要从出…

    其他 2023年3月28日
    00
  • visualstudio怎么调整输出继承对象的大小?

    调整Visual Studio中输出继承对象大小的方法有两种。下面将对这两种方法进行详细的讲解。 方法一:使用调试窗口查看继承对象 在代码中打上断点,使程序停在需要查看的继承对象的位置。 在 Visual Studio 工具栏中选择 “调试” -> “窗口” -> “快速监视” 或使用快捷键 “Shift+Ctrl+Q” 打开窗口。 在快速监视窗…

    other 2023年6月27日
    00
  • DB2获取当前用户表、字段、索引等详细信息

    获取当前用户表、字段、索引等详细信息是DB2数据库管理中一个常见的操作需求,可以通过DB2系统表进行查询。下面是完整的攻略: 1.查询当前用户下所有表 可以通过查询SYSCAT.TABLES系统表获取当前用户下的所有表信息,包括表名、表所属的模式名、表所属的空间名以及表的类型等。查询语句如下: SELECT TABNAME, TABSCHEMA, TBCRE…

    other 2023年6月25日
    00
  • Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

    Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析 1. 类变量与成员变量 类变量 类变量是定义在类中但在所有实例之间共享的变量。它可以通过类名或实例访问,当一个实例修改了类变量的值时,该修改会影响到其他所有实例。在类的定义中,类变量通常位于类方法之外,且在所有实例之前初始化。 示例代码: class Circle: # 类变量 pi =…

    other 2023年6月28日
    00
  • Java可变个数形参的方法实例代码

    Java中的可变个数形参方法允许我们在方法中使用一个不定数量的参数来调用它。这个特性可以很方便的解决一些问题,例如需要处理不定数量的数据,但是参数个数又不确定的情况。 下面是Java可变个数形参的方法实例代码攻略: 创建可变个数形参的方法 Java的可变个数形参的方法可以使用…语法来定义,如下所示: public static int sum(int..…

    other 2023年6月27日
    00
  • 详解java中动态代理实现机制

    详解Java中动态代理实现机制 介绍动态代理 动态代理是一种在运行时生成代理对象的技术,它允许我们在调用目标对象的方法之前或之后插入自定义的逻辑。这种技术在Java中非常常见,被广泛应用于AOP(面向切面编程)和框架开发中。 实现动态代理的机制 Java中实现动态代理的机制主要依赖于两个核心类:Proxy和InvocationHandler。 1. Prox…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部