【软件工程】用map 实现把英语文本文件词和个数打印出来

#include <iostream>
#include <fstream>
#include <string>

#include <map>
using namespace std;

void main(void)              
{
    ifstream input("c:\\urce2.txt");
    string str;
    map<string,int> string_count ;
    while(input>>str){
        
        ++string_count[str];
    }    
    map<string,int>::iterator it=string_count.begin();  // begin函数返回指向map头部的迭代器
    
    cout<<"字符串"<<"  "<<"出现次数"<<endl;
    while(it!=string_count.end()){                      //如果没有到map尾部的迭代器,就循环
        cout<<it->first<<"     "<<it->second<<endl;
        it++;
    }

    input.close();
}



 


c++中,提供了map头文件,他是一个STL 容器,它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点没什么影响。对于迭代器来说,可以修改实值,但不能修改key值;

map还有一个优点就是会将所有的关键字按照由小到大的顺序怕排列,而不用自己去排列。

这个程序是拷贝的同学的,真心觉得用map比较简单。但是有一个缺点就是识别出来的单词如果和标点符号相邻的话会出现错误,即出现和标点符号连在一起的情况。还有就是不会按照第二关键字排序。

程序思路:

1、读文件

2、使用map建立key-value的对应,这里key是str类型,建立一个数组map<string,int> string_count ;

3、如果输入流字符串与数组相同,则使得value加一

4、从头开始读出key和value。

 

值得注意的是用到了迭代(在程序设计里,经常用到这样的方法,同一个变量,用不同的数值来代替,从而使得表达式变得精简),就是替换了刚才那个程序中清空字符数组的操作,程序很简洁。

程序运行结果:

 

问题:

map能够实现按照value值来排序吗?怎么操作呢?

map可以用条件选择将标点符号去掉,使之只输出单词吗?

转载于:https://www.cnblogs.com/liyawen/p/3581167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值