Как мне исправить эту программу на C++?
Вот мой проект:
введение
В этом проекте вы собираетесь реализовать лингвистическое приложение, которое использует словарь произношения для поиска слов с похожим произношением.
Пример. Вы вводите слово, и оно сообщает похожие по звучанию слова:
> donut Pronunciation : D OW1 N AH2 T Identical : DOUGHNUT
Мы собираемся использовать словарь произношения CMU в качестве нашей ссылки. Он доступен в виде простого форматированного текстового файла, прямая ссылка на него: cmudict.0.7 a
Отрывок из него приведен ниже:
PROGRAM P R OW1 G R AE2 M PROGRAM'S P R OW1 G R AE2 M Z PROGRAMME P R OW1 G R AE2 M PROGRAMMER P R OW1 G R AE2 M ER0 PROGRAMMERS P R OW1 G R AE2 M ER0 Z PROGRAMS P R OW1 G R AE2 M Z PROGRAMS' P R OW1 G R AE2 M Z PROGRESS P R AA1 G R EH2 S PROGRESS(1) P R AH0 G R EH1 S PROGRESS(2) P R OW0 G R EH1 S PROGRESSED P R AH0 G R EH1 S T PROGRESSES P R AA1 G R EH2 S AH0 Z PUSH-UP P UH1 SH AH2 P PUSH-UPS P UH1 SH AH2 P S
Таким образом, ваша программа должна игнорировать такие записи, как:
PROGRESS(1) P R AH0 G R EH1 S < ignore PROGRESS(2) P R OW0 G R EH1 S < ignore PUSH-UP P UH1 SH AH2 P < ignore PUSH-UPS P UH1 SH AH2 P S < ignore %PERCENT P ER0 S EH1 N T < ignore &ERSAND AE1 M P ER0 S AE2 N D < ignore
Однако следующие записи считаются хорошими:
PROGRAM P R OW1 G R AE2 M < good PROGRAM'S P R OW1 G R AE2 M Z < good PROGRAMS' P R OW1 G R AE2 M Z < good 'BOUT B AW1 T < good
задача программирования
Написать pronounce.cpp программа, которая
Позволяет пользователю ввести слово (назовем его входным словом W).
Если слово не найдено в словаре, выведите “не найдено”. В противном случае доложите:
Произношение : произношение слова W (как указано в словаре),
Идентично : другие слова из словаря с тем же произношением, что и W,
Добавить фонему : слова, которые можно получить из W, добавив одну фонему,
Удалить фонему : слова, которые можно получить из W, удалив одну фонему,
Замена фонемы : слова, которые могут быть получены из W путем замены одной фонемы.
При перечислении слов включите все слова из словаря, соответствующие критериям, порядок перечисления слов должен быть таким же, как они появляются в словаре.
Ваша программа должна ожидать, что файл словаря cmudict.0.7 a находится в текущей рабочей директории.
Пользовательский ввод должен быть нечувствителен к регистру (принятие пончика, пончика, пончика и т. д.)
Пожалуйста, не создавайте сложный пользовательский интерфейс, который допускает несколько запросов. Программа должна просто попросить одно слово, сообщить ответ и выйти. Смотрите примеры ниже.
Вы можете использовать только те конструкции языка, которые были упомянуты в слайдах лекции и освещены в классе. Для строк можно использовать только операции, упомянутые в классе.
Примеры:
> accord Pronunciation : AH0 K AO1 R D Identical : ACORD
МНЕ ПРОСТО НУЖНА ПОМОЩЬ С ИДЕНТИЧНОЙ ЧАСТЬЮ, В КОТОРОЙ Я ЗАСТРЯЛ.
Что я уже пробовал:
#include <iostream> #include <string> #include <fstream> #include <cctype> using namespace std; void splitOnSpace(string s, string & before, string & after) { // reset strings before = ""; after = ""; // accumulate before space int i = 0; while (i < s.size() && not isspace(s[i])) { before += s[i]; i++; } // skip the space i++; // accumulate after space while (i < s.size()) { after += s[i]; i++; } } int main() { ifstream input; input.open("cmudict.0.7a.txt"); if(input.fail()){ cout << "File did not open"; } string word; string str; string w; cout << "What is the word you want to look up?" << endl; cin>>word; while(input >> str) { if(str == word){ getline(input, word); break; } } string afterSpace; string beforeSpace; splitOnSpace(str + word, beforeSpace, afterSpace); splitOnSpace(str + word, beforeSpace, afterSpace); cout << "Pronounciation: " << afterSpace << endl; do{ getline(input, str); splitOnSpace(str, beforeSpace, afterSpace); if(str == afterSpace) { getline(input, str); } }while(!input.eof()); splitOnSpace(str, beforeSpace, afterSpace); cout << "Identical: " << beforeSpace << afterSpace << endl; }