2016-10-26 3 views
0

Я новичок в C++, и у меня такая же проблема при выполнении программы сравнения текста.Сравнение абзацев C++

Я использовал вектор для хранения моего массива строк, так как мы не знаем длины абзацев. Я создал слова и слова1 для ввода 2 абзацев из 2 txt. файлы. слова для оригинального один как ссылка. words1 - это пользовательский ввод, тот, который нам нужно сравнить с оригинальным, чтобы проверить, сколько ошибок сделал пользователь.

while (fin1 >> str) 
    {     
     words1.push_back(str); 
    } 
    fin.close(); 

Затем я использовал цикл for для сравнения.

for (int i = 0; i < words.size(); ++i) 
    { 
     if (words.at(i) != words1.at(i)) 
      count++; 
    } 

Но, проблема в том, что если длина двух параграфов отличается, то это будет возвращает мне ошибку, так как words.size() отличается.

Примеры, Оригинальный текст (слова): Сегодня среда, я так счастлив поговорить с вами, ребята. Один вход пользователей (слов1 Встроенные): Сегодня вторник, я так рад сказать для вас, ребята.

Это хорошо, моя программа может показать мне количество ошибок 2. Но если есть какие-либо недостающие слова или некоторые дополнительные слова. Программа просто сокрушит.

Примеры: Оригинальный txt: Сегодня среда, я так счастлив поговорить с вами, ребята.

Один вход пользователя: Сегодня вторник, я должен поговорить с вами, ребята.

Вторник не соответствует среда и 'happy' и 'to' отсутствуют Таким образом, это должно быть как 3 ошибки.

Или

Один вход пользователей: Сегодня вторник, я так рад к в поговорить с вами, ребята.

Вторник не совпадает со средой и двумя дополнительными «до». Таким образом, это должно учитываться как 3 ошибки.

Я не уверен, если есть способ подсчета такого рода ошибки

Так самый простой способ решить эту проблему просто, чтобы добавить манекен в короткий массив, чтобы убедиться, что их длиной, как же ?

Надеюсь, что кто-то может обсудить со мной :) Спасибо!

+2

Найдите размер каждой строки и посмотрите, какой из них меньше или равен, и только увеличивайте эту сумму в цикле for. –

+0

У вас означает размер каждого слова?если u означает размер всего массива, я думаю, что не могу использовать меньший, поскольку, если пользовательский ввод меньше исходного. Эти недостающие слова должны считаться ошибками – starf15h

+0

@ Starf15h..в некоторой путанице в том, как вы принимаете входные данные и что хотите сравнить. Пожалуйста, упомяните об этом. – RDX

ответ

0

Определите, у какого вектора меньше записей, например. const size_t compare_length = std::min(words.size(), words1.size()); Затем сравните до compare_length. (используя C++ 11: const auto compare_length = std::min(words.size(), words1.size());)

+0

Если я сравниваю только более короткий.Сколько ошибок должно засчитываться с «A B C D E» до «A B D E» – starf15h

+0

ну, A и B, C/D и D/E не делают, затем останавливаются. 2 совпадения, 2 ошибки. – Rene

+0

как насчет E и пустой части. следует ли считать 3 ошибки? – starf15h

Смежные вопросы