数据结构实验之查找三:树的种类统计——map

本文介绍了一个使用哈希映射处理字符串大小写转换的问题案例,并提供了两种实现方式的代码示例,一种利用C++标准库函数towlower()进行大小写转换,另一种通过ASCII码手动实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Think:
1知识点:哈希映射+字符串大小写转换
2反思:需要提高并熟悉STL中常用容器的基本操作

SDUT题目链接

以下为Accepted代码——towlower()大写字母转换为小写字母

#include <bits/stdc++.h>

using namespace std;

int main(){
    int n, i, num;
    double per;
    char st[104];
    map <string, int> m1;
    scanf("%d", &n);
    getchar();
    for(i = 0; i < n; i++){
        gets(st);
        int len = strlen(st);
        for(int j = 0; j < len; j++){
            st[j] = towlower(st[j]);
        }
        m1[st]++;
    }
    map <string, int> ::iterator it;
    for(it = m1.begin(); it != m1.end(); it++){
        num = it->second;
        per = ((double)num/(double)n)*100.0;
        printf("%s %.2lf%%\n", it->first.c_str(), per);
    }
    return 0;
}


/***************************************************
User name: 
Result: Accepted
Take time: 0ms
Take Memory: 232KB
Submit time: 2017-07-14 20:05:28
****************************************************/

以下为Accepted代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    int n, i, num;
    double per;
    char st[104];
    map <string, int> m1;
    scanf("%d", &n);
    getchar();
    for(i = 0; i < n; i++){
        gets(st);
        int len = strlen(st);
        for(int j = 0; j < len; j++){
            if(st[j] >= 'A' && st[j] <= 'Z'){
                st[j] = st[j] - 'A' + 'a';
            }
        }
        m1[st]++;
    }
    map <string, int> ::iterator it;
    for(it = m1.begin(); it != m1.end(); it++){
        num = it->second;
        per = ((double)num/(double)n)*100.0;
        printf("%s %.2lf%%\n", it->first.c_str(), per);
    }
    return 0;
}


/***************************************************
User name: 
Result: Accepted
Take time: 0ms
Take Memory: 224KB
Submit time: 2017-07-14 20:07:14
****************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值