统计

  • 随笔 - 50
  • 文章 - 42
  • 评论 - 147
  • 引用 - 0

留言簿(6)

随笔分类

文章分类

Link

搜索

  •  

积分与排名

  • 积分 - 162617
  • 排名 - 161

最新评论

阅读排行榜

评论排行榜

STL写的字符替换程序
最近看关联容器相关章节,写了以下程序,作用是先从传入参数的第一个文件中读入键值对,key是目标字串,mapped是要替换的字串,然其后传入文件里的相关字串
 1#include <map>
 2#include <iostream>
 3#include <sstream>
 4#include <fstream>
 5#include <string>
 6#include <stdexcept>
 7using namespace std;
 8int
 9main(int args,char* argv[])
10{
11    try
12    {
13    if(args<3)
14        throw runtime_error("缺少参数,请输入。。。");
15    ifstream fin;
16    fin.open(argv[1]);
17    if(!fin) //检查文件是否被正确打开
18        throw runtime_error("map file not found");
19    string keystr,mapstr;
20    map<string,string> mappedctner;
21    while(fin>>keystr>>mapstr)
22    {
23        mappedctner[keystr]=mapstr;//采用下标引用的方法插入元素
24    }

25    for(int cnt(2);cnt!=args;cnt++)
26    {
27        fin.close();
28        fin.clear();
29        fin.open(argv[cnt]);
30        stringstream sstr;
31        sstr<<"target file "<<cnt-1<<" not found"<<endl;//格式化字串
32        if(!fin)
33            throw runtime_error(sstr.str());//str()成员存储输入的文本对象
34        map<string,string>::iterator itr;
35        while(fin>>keystr)
36        {
37            if((itr=mappedctner.find(keystr))!=mappedctner.end())
38                keystr=itr->second;//找到相关字串,利用迭代器引用second的mappedvalue类型替换
39            cout<<keystr<<" ";
40        }

41        cout<<endl;
42    }

43    }

44    catch(runtime_error e)
45    {
46        cout<<e.what()<<endl;
47    }

48    catch(ios_base::failure e)
49    {
50        cout<<e.what()<<endl;        
51    }

52    return 0;
53}

54

posted on 2008-12-03 17:27 pear_li 阅读(633) 评论(0)  编辑 收藏 引用 所属分类: C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理