Перевод программы - PullRequest
       17

Перевод программы

1 голос
/ 02 ноября 2009

Я начинаю писать программу-переводчик, которая будет переводить строку текста, найденную в файле, используя параллельные массивы. Язык перевода - свиная латынь. Я создал текстовый файл для использования в качестве словаря латинского английского языка. Я не хотел использовать любые двухмерные массивы; Я хочу держать массивы в одном измерении. В основном я хочу прочитать текстовый файл, написанный на PigLatin, и используя созданный мной словарь, я хочу вывести перевод на английский в командной строке.

Моя идея псевдокода:

  • Открыть текстовый файл словаря.

  • Спросите у пользователя название текстового файла, написанного на PigLatin, который он / она хочет перевести на английский

  • Поиск каждого слова в текстовом файле пользователя и сравнение со словарем для последующего соответствующего перевода слова. Продолжайте, пока не останется больше слов для перевода.

  • Показать переведенные слова на экране командной строки.

Я думал об использовании параллельных массивов, один из которых содержал слова, переведенные с английского, а другой - латинские слова.

Я хотел бы знать, как я могу манипулировать строками, используя массивы в C ++?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 02 ноября 2009

Если файлы всегда будут переводиться в одном направлении (например, PigLatin -> English), тогда будет проще и эффективнее использовать std::map для отображения одной строки в другую:

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

И получите переведенное слово, просто используйте dictionary[] для поиска (например, std::cout << dictionary["upidstay"] << std::endl;)

4 голосов
/ 02 ноября 2009

Свинья латинская может быть переведена на лету.

Просто разделите слова перед первым гласным каждого слова, и вам не понадобится файл словаря. Затем объедините вторую часть с первой частью, разделенной символом «-», и добавьте «ay» в конце.

Если вы не хотите использовать файл словаря?

1 голос
/ 02 ноября 2009

Объявление массива строк легко, так же, как объявление массива чего-либо еще.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...