【问题标题】:Translating Program翻译程序
【发布时间】:2009-11-02 20:50:43
【问题描述】:

我开始编写一个翻译程序,它将使用并行数组翻译在文件中找到的一串文本。要翻译的语言是猪拉丁语。我创建了一个文本文件用作猪拉丁语到英语词典。我不想使用任何二维数组;我想将数组保持在一维中。 基本上我想阅读一个用 PigLatin 编写的文本文件,并使用我创建的字典在命令行上将翻译输出为英语。

我的伪代码思路是:

  • 打开字典文本文件。

  • 向用户询问他/她想要翻译成英文的 PigLatin 文本文件的名称

  • 搜索用户文本文件中的每个单词并与字典进行比较,然后相应地翻译该单词。继续翻译,直到没有更多的词要翻译。

  • 在命令行屏幕上显示翻译后的单词。

我正在考虑使用一个并行数组,一个包含英文翻译词,另一个包含猪拉丁词。

我想知道如何在 C++ 中使用数组来操作字符串?

谢谢。

【问题讨论】:

    标签: c++ arrays string


    【解决方案1】:

    如果文件总是沿一个方向翻译(例如 PigLatin -> 英语),那么使用 std::map 将一个字符串映射到另一个字符串会更容易、更有效:

    std::map<std::string, std::string> dictionary;
    dictionary["ashtray"] = "trash";
    dictionary["underplay"] = "plunder";
    

    并获得翻译的单词,只需使用dictionary[] 查找(例如std::cout &lt;&lt; dictionary["upidstay"] &lt;&lt; std::endl;

    【讨论】:

    • std::map 很容易成为制作字典的最干净的方法。 :)
    • 我知道它更有效,但我的主要目标是学习如何使用并行数组。我将如何继续为此使用并行数组。
    【解决方案2】:

    猪拉丁语可以即时翻译。

    只需在每个单词的第一个元音之前拆分单词,您就不需要字典文件。然后将第二部分与第一部分连接起来,用'-'分隔,并在末尾添加“ay”。

    除非您想要使用字典文件?

    【讨论】:

    • 我想使用字典,以便更好地学习字符串操作。您对如何实现这一目标有任何想法吗?感谢您的快速回复。
    • 我不确定字典如何帮助您学习字符串操作? std::map 制作一个干净的字典。不过,使用它并没有太大的教育价值。即时翻译这个不会教你字符串操作,我错过了什么吗?
    • 谢谢,我会调查的。
    【解决方案3】:

    声明一个字符串数组很容易,就像声明一个数组一样。

    const int MaxWords = 100;
    std::string piglatin[MaxWords];
    

    这是一个包含 100 个字符串对象的数组,该数组名为 piglatin。字符串开始是空的。你可以像这样填充数组:

    int numWords = 0;
    std::ifstream input("piglatin.txt");
    std::string line;
    while (std::getline(input, line) && numWords < MaxWords) {
      piglatin[numWords] = line;
      ++numWords;
    }
    if (numWords == MaxWords) {
      std::cerr << "Too many words" << std::endl;
    }
    

    我强烈建议您不要使用数组。请改用容器对象,例如 std::vectorstd::deque。这样,您可以在事先不知道文件有多大的情况下加载文件的内容。使用上面的示例声明,您需要确保文件中的条目不超过 100 个,如果少于 100 个,则需要跟踪数组中有多少条目是有效的。

    std::vector<std::string> piglatin;
    
    std::ifstream input("piglatin.txt");
    std::string line;
    while (std::getline(input, line)) {
      piglatin.push_back(line);
    }
    

    【讨论】:

    • 我想使用数组,因为我还没有了解标准向量。假设我知道该文件将包含多少个单词。例如,假设该文件最多包含 30 个单词。该词典将有 100 个单词及其相应的翻译。我知道我会声明大小为 30 的数组。对吗?然后我会读入用户文本文件中的单词并在字典文件中查找他们的翻译。最后,我将在命令行上计算翻译。关于如何进行比较的任何想法。谢谢。
    • 是的。如果你知道你将拥有多少个单词,然后声明一个包含那么多元素的数组,就像我演示的那样。要比较字符串是否相等,您可以使用== 运算符,就像比较大多数其他类型一样。 (不要在char* 上使用==;它不会达到你的预期。但你可能没有使用char*,所以不用担心。)
    • @jualin:如果您专门学习 C++,实际上最好先了解 std::vector,然后再了解数组。向量更高级。同样,您应该先了解std::string,然后再使用原始char* 字符串。
    • 感谢两位的想法。我将研究 std: :vector Pavel。感谢您的快速回复。
    • 我打算使用的字典几乎有这种格式:PigLatin word English Translation 因此,我想我可以在这个文件中读入并行数组。这是正确的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2013-04-17
    • 2016-02-10
    • 2014-12-29
    相关资源
    最近更新 更多