首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >翻译程序

翻译程序
EN

Stack Overflow用户
提问于 2009-11-02 20:50:43
回答 3查看 4.9K关注 0票数 1

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

我的伪代码想法是:

English

  • Searching

  • 打开字典文本文件。

  • 要求用户提供他/她想要将用户文本文件上的每个单词翻译成PigLatin的PigLatin文本文件的名称,并与字典进行比较,然后相应地翻译单词。继续往前走,直到命令行屏幕上的translate.

  • Show没有更多的单词--

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

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-02 20:58:47

声明字符串数组很容易,就像声明其他任何东西的数组一样。

代码语言:javascript
复制
const int MaxWords = 100;
std::string piglatin[MaxWords];

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

代码语言:javascript
复制
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个,则需要跟踪数组中有多少项是有效的。

代码语言:javascript
复制
std::vector<std::string> piglatin;

std::ifstream input("piglatin.txt");
std::string line;
while (std::getline(input, line)) {
  piglatin.push_back(line);
}
票数 1
EN

Stack Overflow用户

发布于 2009-11-02 20:57:53

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

代码语言:javascript
复制
std::map<std::string, std::string> dictionary;
dictionary["ashtray"] = "trash";
dictionary["underplay"] = "plunder";

得到翻译的单词,只需使用dictionary[]查找(例如,std::cout << dictionary["upidstay"] << std::endl;)

票数 5
EN

Stack Overflow用户

发布于 2009-11-02 20:54:45

猪拉丁语可以即时翻译。

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

除非你想使用字典文件?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1663615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档