在一行文本中提取单词的方法

 

在看c++Primer的时候看到当中有一个很巧妙的提取一行中单词的方法,觉得很有感触,就将这段代码敲出来分享一下:

/*程序的主要完成的功能是转换一段文字中的特殊单词为我们指定的单词

比喻我们规定用 cuz  代表because 以后凡是遇到cuz的地方都用because进行替换

*/

//主要的实现思路很简单 就是用map做一个键值对 将cuz 这种设置为key  将because设置为value 将要处理的文字存储在vector中 判断并进行替换

//下面看实现代码:

int main(int argc,char **)
{
      map<string,string> trans_map; 
      string key,value;
       if(argc!=3)
    {
         throw runtime_error("参数个数不对!");
    }
    ifstream map_file;
    map_file.open(argv[1]);
   if(map_file.fail())
   {
       throw runtime_error("不能打开转化文件");
   }
  while(map_file>>key>>value)
   {
        trans_map.insert(make_pair(key,value));
   }
//不得不为这段代码的简洁而赞叹 ,作者对对象和派生关系的理解可见一斑。之间用map_file>> 就像使用cin>> 一样 。如此简洁并且用得如此恰当。完全符合我们的操作要求,最重要的是他真正的用到了统一的概念,他让我们真正的去理解标准输入输出和文件其实是一样的。操作如此简单
ifstream input;
input.open(argv[2]);
if(input.fail())
{
    throw runtime_error("无法打开输入文件!");
}
string line;
while(get_line(intput,line))
{
   istringstream stream(line);//这里真的很巧妙 他将一行和istringstream这个流关联起来 ,如此以来我们处理字符串就像处理文件流一样方便了 那么提取用空格分割的单词就不在话下了
string word;
 while(stream>word)
{
   //对word进行相应的处理  
}
}
}

 不懂为什么自己以前为什么就写不出这样的代码呢?

反省一下 发现是由于自己的发现和探索精神不强。平时都没怎么注意利用类之间的派生关系来分析和看待问题。

这个习惯要改了!

 

posted @ 2012-10-25 00:03  张敏樱木花道  阅读(1018)  评论(0)    收藏  举报