我开始编写一个翻译程序,它将使用并行数组翻译文件中的一串文本。要翻译的语言是pig Latin。我创建了一个文本文件,用作猪拉丁语到英语词典。我不想使用任何二维数组;我想将数组保持在一个维度。 基本上我想读取用PigLatin编写的文本文件,并使用我创建的字典,我想在命令行上将翻译输出到英文。
我的伪代码理念是:
打开字典文本文件。
向用户询问用PigLatin编写的文本文件的名称,他/她想要翻译成英文
搜索用户文本文件中的每个单词并与词典进行比较,然后相应地翻译单词。继续前进,直到没有更多的词要翻译。
在命令行界面显示翻译的单词。
我正在考虑使用并行数组,其中一个包含英语翻译单词,另一个包含猪拉丁语单词。
我想知道如何在C ++中使用数组操作字符串?
谢谢。
答案 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::vector
或std::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);
}