【问题标题】:Overlay text files on top of each other and output to another text file in C++? [closed]将文本文件相互叠加并输出到 C++ 中的另一个文本文件? [关闭]
【发布时间】:2014-10-13 16:12:33
【问题描述】:

我正忙于编写一个程序,该程序使用文本文件中的奴才的 ASCII 构造奴才(来自 Despicable Me)。我想要做的是能够让用户输入他/她希望奴才拥有的功能。然后,由此,程序将通过将文本文件放在一起作为他/她想要的仆从来“装饰”这个仆从。

例如:

用户输入他想要tall minion with one eye and a big smile - 我将拥有已经在文本文件中创建的奴才的特征,而奴才中缺少某些部分。我想要做的是将高大的奴才文本文件“覆盖”在单眼奴才文本文件的顶部,大微笑奴才文本文件的顶部,因此最终它会创建一个完整的奴才。

我只是想知道这是否可行?我可以像这样构建奴才,还是必须通过完全更改文本文件的格式来使用 fstream 添加功能来艰难地做到这一点。

此链接是这些 minion ascii 的来源:http://textart4u.blogspot.com/2013/08/minion-what-text-art-despicable-me.html

【问题讨论】:

  • 听起来你几乎需要一个 CSV 格式,比如 tall, one eye, big smile 这样功能被“分类”到 CSV 的指定列中,然后你可以接受用户输入并将其翻译成这种类型的CSV 数据。然后,您将拥有一个与奴才的关键特征相关的奴才文本数据库。
  • 是的,我想到了那种东西,但意识到有很多选择,因为奴才可以拥有许多不同类型的功能。不过谢谢

标签: c++ text-files fstream


【解决方案1】:

暂时忽略不同维度的奴才问题。假设您有一些表示透明度的字符(或不属于特征的字符,例如空白),您可以为每个特征分配一个深度,从背景到前景迭代选定的特征文件,并编写每个非正确位置的透明字符到正在进行的 minion 文本文件。

这是一些非常粗略的伪代码,假设每个文件具有相同的行数。

Write minion base (most background) to output file.

For each feature file, from background to foreground:
    Seek to beginning of output file.

    For each line in feature file / output file:
        Extend output file's line to match feature file's line if necessary.

        For each character in line of feature file / output file:
            If feature file's char is not transparent:
                Overwrite current char in output file with current char in feature file.

如果这不够灵活,您可以为特征文件的每个字符分配一个深度,并以任意顺序迭代特征文件,仅当特征文件的字符更接近前景时才覆盖当前输出文件的字符。您需要以某种方式对深度进行编码——使用相应的深度文件是一种显而易见的方式。

棘手的部分可能是支持不同维度的奴才。为了处理这个问题,为每个特征/小兵体类型组合指定垂直/水平偏移可能就足够了,并使用它来调整在正在进行的输出文件中写入特征的位置。或者,通过适当的修改来复制每个特征文件以使其适合给定的小兵体类型可能会更容易。这两种方法都需要一些人工繁重的工作,但如果您不必担心那么多体型,这些简单的方法可能比更复杂但更灵活的方法更可取。

【讨论】:

  • 读完之后,这肯定会起作用,但我决定将模板minion的内容读入一个向量,然后读入例如眼睛并替换眼睛应该的向量内容然后将该向量输出到一个新文件,它似乎工作得很好。不过感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多