首页 > 程序开发 > 软件开发 > 其他 >

使用数组统计每个单词在输入中出现的次数

2017-10-23

使用数组统计每个单词在输入中出现的次数。map是关键字-值对的集合。例如,可以将一个人的名字作为关键字,将其电话号码作为值。map类型通常被称为关联数组(associative array)。关联数组与“正常”数组类似,不同之处在于其下标不必是整数。我们通过一个关键字而不是位置

使用关联数组统计每个单词在输入中出现的次数

摘录于C++ primer 中文版 第五版

#include 
#include
#include 
using namespace std;

int main()
{
    map word_cout;  //string是单词,size_t是单词的个数
    string word;
    while (cin >> word) //ctrl+z结束输入
    {
        ++word_cout[word];  //提取word的计数器并将其加1
    }
    for (const auto& w : word_cout) // 遍历map中的每个元素
    {
        cout << w.first << " occurs " << w.second
            << ((w.second > 1) ? " times" : " time") << endl;
    }

    return 0;
}

map是关键字-值对的集合。例如,可以将一个人的名字作为关键字,将其电话号码作为值。map类型通常被称为关联数组(associative array)。关联数组与“正常”数组类似,不同之处在于其下标不必是整数。我们通过一个关键字而不是位置来查找值。给定一个名字到电话号码的map,我们可以用一个人的名字作为下标来获取此人的电话号码。

此程序中,map保存的每个元素中,关键字是string类型,值是size_t类型(=无符号整形,描述string大小的类型)。当对word_count进行下标操作时,我们使用一个string作为下标,获得与此string相关联的size_t类型的计数器。

while循环每次从标准输入读取一个单词。它使用每个单词对word_count进行下标操作。如果word还未在map中,下标运算符会创建一个新元素,其关键字为word,值为0。不管元素是否是新创建的,我们将其加1。

C++11新标准提供的一种语句:范围for(range for)语句。这种语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是:
for (declaration : expression)
statement
其中,expression部分是一个对象,用于表示一个序列。declaration部分负责定义一个变量,该变量将用于访问序列中的基础元素。每次迭代,declaration部分的变量会被初始化为epression部分的下一个元素值。通过使用关键字auto让编译器来决定变量word的类型。这里的word的类型是pair类型。

一旦读取完所有的输入,范围for语句就会遍历map,打印每个单词和对应的计数器。当从map中提取一个元素时,会得到一个pair类型的对象,pair是一个模板类型,保存两个名为first和second的公有数据成员。map所使用的pair用first成员保存关键字,用second成员保存对应的值。因此,输出语句的效果是打印每个单词及其关联的计数器。

运行结果:
这里写图片描述

相关文章
最新文章
热点推荐