PAT basic level 1042字符统计

本文解释了C++11中的范围基于循环(Range-basedforloop)如何简化遍历map操作,展示了如何使用auto关键字和迭代器处理字符映射,以及&符号在提升效率中的作用。
摘要由CSDN通过智能技术生成
#include <bits/stdc++.h>
using namespace std;

int main()
{
    map<char,int> m; // 修改为使用字符作为键
    string s;
    getline(cin, s); // 使用getline来获取包含空格的输入字符串
    for(int i=0;i<s.length();i++){
        if(isalpha(s[i])){  // 如果是字母,别忘了
            char ch = tolower(s[i]); // 转换为小写字母
            if(m[ch] == 0){
                m[ch] = 1;
            } else {
                m[ch]++;
            }
        }
    }

    char maxChar = '\0';
    int maxFreq = 0;

    for(auto& entry : m) {                    //注意这一块代码的写法
        if(entry.second > maxFreq) {
            maxFreq = entry.second;
            maxChar = entry.first;
        }
    }

    cout << maxChar << " " << maxFreq << endl;

    return 0;
}

这句代码使用了 C++11 中的范围基于循环(Range-based for loop)。这种循环语法可以更方便地遍历容器(比如数组、向量、map等)中的元素。

语法结构如下:

for (declaration : expression) {
    // statements
}

在这里,declaration 是一个用来声明并初始化一个变量的语句,这个变量会依次取得 expression(通常是一个容器)中的每个元素的值。expression 是一个表示容器的表达式。在每次迭代中,declaration 的变量被自动赋值为 expression 中的下一个元素,然后循环体内的语句会被执行。

在本例中,for(auto& entry : m) 意味着我们遍历了m这个map中的每一个键值对(key-value pair),其中 entry 是一个变量,表示当前迭代的键值对。在循环内部,我们通过 entry.first 获取键,通过 entry.second 获取值。

这种范围基于循环的语法简洁直观,常常用于遍历容器,是 C++11 提供的一种方便的循环语法。

常见疑惑:1auto是什么意思    2为什么要用一个&     3为什么:后面加容器

  1. auto 是 C++11 引入的关键字,用于自动地让编译器推断变量的类型。使用 auto 关键字声明变量时,编译器会根据等号右边的表达式推断出变量的类型。例如,auto x = 5; 中的 x 的类型会被推断为整数型。在范围基于循环中的使用,auto 的作用是让编译器推断迭代变量的类型,使代码更加简洁和易读。比如,for (auto& entry : m) 中的 entry 类型会被推断为 m map 中的元素类型。

  2. 在 for(auto& entry : m) 中,& 表示迭代变量 entry 是一个引用,这样做的目的是为了避免对容器中的元素进行复制,从而提高程序的效率。使用引用可以直接访问容器中的元素,而不是通过复制一个新的对象。

  3. 在范围基于循环中, 后面加上一个容器(比如数组、向量、map、列表等)表示要遍历这个容器中的所有元素。这种语法结构使得代码编写更加简洁清晰,同时也能避免手动管理循环变量和迭代器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值