C语言统计某个字母的个数、统计各种字符的个数、统计单词的个数牛客22202题」2023年9月27日

1.引用<ctype.h>库函数:

拿牛客上面的题目举例:

https://ac.nowcoder.com/acm/problem/22202

 输入一串字符,以“?”结束。统计其中字母个数,数字个数,其它符号个数。

#include <stdio.h>  // 标准输入输出函数,例如 printf 和 scanf
#include <stdlib.h>  // 常用的实用程序函数,例如内存分配和随机数生成
#include <string.h>  // 字符串处理函数,例如字符串拷贝和字符串比较
#include <math.h>  // 数学函数,例如三角函数和指数函数
#include <time.h>  // 时间和日期操作函数
#include <stdbool.h>  // 布尔类型支持
#include <ctype.h>  // 字符处理函数,例如字符大小写转换和字符类型判断
#include <limits.h>  // 常量定义,包括整数类型的取值范围
#include <assert.h>  // 断言库,用于在程序中插入断言条件

int main(){
    char std[100];
    int i,Letters=0,Digits=0,Others=0,j=0;
   for (i = 0; i < 100; i++) {
        scanf("%c", &std[i]);
        if (std[i] == '?' || i == 99) {
            std[i+1] = '\0'; 
            break;
        }
    }
    for (j;std[j] !='?';j++) {
        if(isalpha(std[j])){
            Letters++;
        }
        else if (isdigit(std[j])) {
            Digits++;
        }
        else if (isspace(std[j])){
            Others++;
            continue;
        }
        else{
            Others++;
        }
    }
     printf("Letters=%d\nDigits=%d\nOthers=%d",Letters,Digits,Others);
    return 0;
}

对于这道题其实比较简单只要用上ctype.h库中的函数就可以解决问题

ctype.h库函数提供了一些用于字符类型判断和转换的函数,包括以下函数(重点):

  • isalnum(c):判断字符c是否为字母或数字。
  • isalpha(c):判断字符c是否为字母。
  • isdigit(c):判断字符c是否为数字。
  • isspace(c):判断字符c是否为空格符、制表符、换行符等空白字符。
  • isupper(c):判断字符c是否为大写字母。
  • islower(c):判断字符c是否为小写字母。
  • tolower(c):将字符c转换为小写字母。
  • toupper(c):将字符c转换为大写字母。

可以通过#include<ctype.h>语句引用该库函数

根据引用和引用中的代码,输入一个只包含小写英文字母和数字的字符串,通过使用Python编程语中的匿名函数和字典来现字符统计,然后按照不同字符的数量由多到少输出统计结果,并且如果统计个数相同,则按照ASCII码由小到大排序输出。 具体的实现步骤如下: 1. 使用一个无限循环来持续接收输入的字符串。 2. 在每次循环中,使用input()函数获取输入的字符串。 3. 创建一个空字典dict_a来存储字符统计的结果。 4. 遍历输入的字符串,对于每个字符,如果它不在字典dict_a的键中,就将它添加到字典dict_a中,并将它的值设为1;如果它已经在字典dict_a的键中,就将它对应的值加1。 5. 使用lambda函数作为key参数,对字典dict_a进行排序,首先按照字符的数量从大到小排序(即根据字典的值进行排序),如果数量相同,则按照ASCII码从小到大排序(即根据字典的键进行排序)。 6. 将排序后的结果按照指定的顺序连接成一个字符串,并输出结果。 根据引用中的代码,我们可以得到另一种实现方法: 1. 使用一个无限循环来持续接收输入的字符串。 2. 在每次循环中,使用input()函数获取输入的字符串。 3. 使用sorted()函数和set()函数对输入的字符串去重并排序,得到一个按照ASCII码从小到大排序的字符列表temp。 4. 使用lambda函数作为key参数,对temp列表进行排序,按照字符在输入字符串中出现的次数进行从大到小排序。 5. 将排序后的结果按照指定的顺序连接成一个字符串,并输出结果。 综上所述,根据用户提供的"hj102",我们可以使用Python来统计字符并按照要求进行排序输出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [OJ刷(牛客) |HJ102 字符统计](https://blog.csdn.net/bl_yang/article/details/120008631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [《华为机试》刷之HJ102 字符统计](https://blog.csdn.net/qq_34331113/article/details/122606224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值