Member 13754626 Ответов: 2

Как мне исправить эту программу на 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;
    
  
  
 
 }

2 Ответов

Рейтинг:
2

OriginalGriff

Это ваша домашняя работа, и заставить ее работать - это часть задачи, и, честно говоря, это большая, важная часть задачи!

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Member 13754626

Я уже пробовал это, и я работал всю ночь в 7 утра, и я отчаянно нуждаюсь в любой помощи. Я был бы вам очень признателен. Я просто не знаю, что делать...ПОМИЛОВАТЬ. Не говоря уже о том, что он должен быть очень скоро, и я забит множеством другой работы. Я бы не стал задавать вопрос, не потратив хотя бы пару часов на его отладку(или попытку).

OriginalGriff

А что показал вам отладчик?

Member 13754626

Я изначально использовал cout statments и заметил, что at getline(input, str) - это единственное, что не работает. Честно говоря, в данный момент я просто отчаянно нуждаюсь даже в намеке, потому что у меня нет ни времени, ни знаний, чтобы установить отладчик. Если бы мой университетский городок не был закрыт, я бы пошел туда, чтобы сделать это. Пожалуйста, дайте мне только один намек на то, почему он не распечатывается, когда мне нужно поспать. я всего лишь нищий, и у меня скоро крайний срок. Я обещаю вам, что я не такой, как другие, я действительно пытаюсь в течение нескольких часов, прежде чем прийти за помощью. Я отлаживаю с помощью cout statments если только я не нахожусь в своем кампусе колледжа

Member 13754626

Мне действительно очень жаль беспокоить вас, и я ценю ваше время и усилия. Я обещаю, это не будет invain.

Рейтинг:
2

W∴ Balboos, GHB

Глядя на предыдущие комментарии, я чувствую, что должен вам кое-что указать.

Программирование "на всю ночь" не является чем-то необычным. Если вы в отчаянии, потому что ждали до последней минуты, чтобы решить проблему, то считайте, что урок, который вы должны выучить - не ждите до последней минуты! Что-то, что вы, возможно, уже знаете и просто должны действительно подумать.

С другой стороны, если это не последняя минута, потратьте некоторое время на то, чтобы разбить проблему на все ее отдельные задачи. Не те задания, которые дает преподаватель, а те, которые составляют этапы выполнения каждого из заданий.


  1. Что вам нужно сделать, чтобы найти слово в вашем словаре?
  2. Что вы делаете, чтобы получить фонетическую форму этого слова?
  3. Как вы ищете в словаре другие слова с соответствующими частями этой фонетической формы соответствия?
  4. Как вы преобразуете это обратно в "настоящее слово" и сообщаете об этом пользователю?



Member 13754626

Я не ищу soultuion для всего этого. Я просто застрял на идентичной части пожалуйста помогите