翻译计划

时间:2009-11-02 20:50:44

标签: c++ arrays string

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

我的伪代码理念是:

  • 打开字典文本文件。

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

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

  • 在命令行界面显示翻译的单词。

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

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

谢谢。

3 个答案:

答案 0 :(得分:5)

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

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

获取翻译后的字词,只需使用dictionary[]进行查找(例如std::cout << dictionary["upidstay"] << std::endl;

答案 1 :(得分:4)

Pig latin可以即时翻译。

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

除非你希望使用字典文件?

答案 2 :(得分:1)

声明一个字符串数组很简单,就像声明其他任何数组一样。

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);
}