应该如何存储大量硬编码的文本?在 txt 文件中?在代码本身中(在字符串中)?还是另一种方式?例如帮助对话的文本
5 回答
只要“大量”意味着小于兆字节,我会说只需将其存储在std::string
. 如果没有更多细节,您将不会得到更好的答案。
鉴于您的评论:
大尺寸是指段落和页面之间,硬编码是指程序员设置的永远不会改变的东西
听起来您想存储少量散文。您肯定希望将其存储在const std::string
:
const std::string ipsum =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec massa mauris.\n"
"Maecenas luctus venenatis mauris, ut pulvinar nisl ultricies sed. Mauris\n"
"adipiscing aliquet massa id dapibus. Praesent leo nisl, sollicitudin quis\n"
"sodales in, mattis ac tortor. Phasellus semper vehicula nibh sit amet pulvinar.\n"
"Nam faucibus, turpis non feugiat consequat, massa lacus euismod lorem, in\n"
"viverra orci justo a odio.";
没有绝对正确的答案。
“软编码”意味着您将散文维护为外部文本文件,您可以在初始化时阅读该文件。这具有以下优点:
- 您可以更改散文而无需重新编译程序
- 您可以提供不同语言的散文(通过在初始化时选择适当的文本文件)
- 您可以使用标准拼写检查器(而不是拼写检查您的代码)
- 非程序员可以维护文本文件
缺点是您需要跟踪文本文件并确保它位于正确的位置、具有正确的名称和正确的编码。您可能还需要对其进行加密,或者以其他方式对其进行模糊处理。
“硬编码”意味着您将散文编码为字符串或等价物。这具有以下优点:
- 你只做一次,就永远忘记了(如果你直接在主代码中做,你需要维护的文件更少,而不是头文件或单独的源文件)
当然,缺点是每次需要更改时都需要重新编译代码。
所以,答案是对你有用的。它不会改变,你可以简单地把它扔进一个字符串?去做吧。是否值得编写代码来读取文件并确保它存在,以便您可以在需要时更改它?去做吧。
答案取决于你。
一段或一页的文字真的没有那么多。将它保存在字符串文字中的唯一障碍是在代码中指定它的笨拙。请参阅字符串文字的最大长度?具体限制。
字符串字面量的一个很好的特性是您可以将它们放在一起,它们之间只有空格,它们将被连接成一个字符串。
const char * paragraph =
"'Twas brillig, and the slithy toves" "\n"
"Did gyre and gimble in the wabe;" "\n"
"All mimsy were the borogoves," "\n"
"And the mome raths outgrabe." "\n";
我不建议您在程序中硬编码为常量。
如果文本不是机密的,一个好主意可以是带有键值对的纯文本文件。键的名称是包含该值的变量的名称。
例如:
Quixote="Bla bla bla.........bla"
Hamlet="Bla bla bla ........bla"
EOF
您可以在开始时检索值,并且使用此模式,您的可执行文件更轻,并且可以轻松维护大型文本。
如果文本是机密的,您可以使用相同的模式,但加密存储的文本并在开始时对其进行解密。
如果您的意思是大数据,您可以将其保存为二进制形式。它大大减少了数据的大小,尽管它不是人类可读的。这通常用于数值数据。我真的不明白“硬编码”。您通常读取原始数据,并指示语言以二进制格式编写它。(你必须考虑小端和大端,但现在大多数机器都是小端)