zoukankan      html  css  js  c++  java
  • 文本转换程序

          今天看到《C++ Primer》第四版的10.3.9节。这里面出现了一个我学习这本书来个人感觉最像程序的一个程序。就其复杂度,使用的知识点的难度,让我觉得我要彻底把这个程序弄懂。

          这个程序求解的问题是:给出一个string对象,把它转换成另一个string对象。本程序的输入是两个文件。第一个文件包括了若干个单词对,每对的第一个单词将出现在输入的字符串中,而第二个单词则是用于输出。本质上,这个文件提供的是单词转换集合——在遇到第一个单词时,应该将之替换为第二个单词。而第二个文件则提供了需要转换的文本。如果转换文件的内容是:

    'em    them
    cuz    because
    gratz    grateful
    i    I
    nah    no
    pos    supposed
    sez    said
    tanx    thanks
    wux    was


    而要转换的文本是:
    nah i sez tanx cuz i wuz pos to
    not cuz i wuz gratz


    则程序将产生如下输出结果:
    no I said thanks because I was supposed to
    not because I was grateful

    单词转换程序
    下面给出的解决方案是将单词转换文件的内容存储在一个map容器中,将被替换的单词作为键,而用作替换的单词则作为其相应的值。接着读取输入,查找输入的每个单词是否对应有转换。如有,则实现转换,然后输出其转换后的单词,否则,直接输出原词。


    该程序的主函数需有两个实参:单词转换文件的名字以及需要转换的文件名。程序执行时,首先检查实参的个数。第一个参数argv[0]是命令名,而执行该程序所需要的两个文件名参数则分别存储在argv[1]及argv[2]中。
    如果argv[1]的值合法,则调用open_file函数打开单词转换文件。假设open操作成功,则读入“单词转换对”。以“转换对”中第一个单词为键,第二个为值,调用insert函数在容器中插入新元素。while循环结束后,trans_map容器对象包含了转换输入文本所需的数据。而如果该实参有问题,则抛出异常并结束程序的运行。

    接下来,调用open_file打开要转换的文件。第二个while循环使用getline函数逐行读入该文件。因为程序每次读入一行,从而可在输出文件的相同位置进行换行。然后在内嵌的while循环中使用istringstream将没一行中的单词提前出来。
    内层的while循环检查每个单词,判断它是否在转换的map对象中出现。如果在,则从该map对象中取出对应的值替换此单词。最后,无论是否做了转换,都输出该单词。同时,程序使用bool值firstword判断是否需要输出空格。如果当前处理的是这一行的第一个单词,则无需输出空格。


    程序明天附上。






  • 相关阅读:
    在MonoTouch中自定义表格 狼人:
    Android开发进阶:如何读写Android文件 狼人:
    Windows Phone 7 开发之:工具栏 狼人:
    Android平台Qt开发入门教程 狼人:
    PySide中的信号和槽 狼人:
    sql server 2005 通过代理定时备份数据库
    Java I/O流操作(三)File文件操作及打印流和序列流合并流
    分别介绍以下数据提供者连接各种数据库的方法 (vb.net)
    OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
    软件架构设计之Utility模块——string
  • 原文地址:https://www.cnblogs.com/pangblog/p/3402476.html
Copyright © 2011-2022 走看看