alexanderBaranov / OOP

OOP
0 stars 0 forks source link

Замечания по подсчету слов в тексте #13

Open alexey-malov opened 8 years ago

alexey-malov commented 8 years ago
string GetWordFromString(string &inputString)

почему ссылка обычная?


не актуально

alexey-malov commented 8 years ago
    for (size_t i = 0; i < inputString.length(); i++)
    {
        if (isalnum(inputString[i], loc))
        {
            resultWord += inputString.substr(i, 1);
        }
    }

Извлечение подстроки из одного символа - приводит к чрезмерным вычислениям Лучше перебирать через range-based for (нет необходимости в использовании индексов) В результирующей строке рекомендуется зарезервировать место, достаточное для хранения результьата без реаллокаций (метод reserve) Еще можно попробовать через адаптор boost::adaptor::filtered


пойдет

alexey-malov commented 8 years ago
        if (!IsDigit(word))
        {
            word = GetWordFromString(word);
            if (!word.empty())
            {
                ++words[word];
            }
        }

В соответствие с требованием задания отбрасывать последовательности символов, состоящих из цифр, не нужно. как впрочем и фильтрация черз isalphanum

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


не актуально

alexey-malov commented 8 years ago

Задание:

Разработайте программу, выполняющую подсчет частоты встречаемости слов, поступающих _со стандартного потока ввода_ и выводящую слова их частоты их встречаемости в стандартный поток вывода.

Программа же читает их из файла, причем файл считывает в память целиком. Нужно считывать данные из стандартного потока или же из istream (позволит протестировать использующую его функцию путем подсовывания ей istringstream или ifstream или произвольного другого наследника)

alexey-malov commented 8 years ago
BOOST_AUTO_TEST_CASE(testStringOperations)
{   
    BOOST_CHECK(CountWords("a a bbbb ; ; bbbb") == mapWords({ { "a", 2 }, { "bbbb", 2 } }));
    BOOST_CHECK(CountWords("привет a a bbbb ; ; bbbb") == mapWords({ { "привет", 1 }, { "a", 2 }, { "bbbb", 2 } }));
    BOOST_CHECK(CountWords("привет;;; a a bbbb ; ; bbbb") == mapWords({ { "привет", 1 }, { "a", 2 }, { "bbbb", 2 } }));
    BOOST_CHECK(CountWords("asd zxc s , , s asd") == mapWords({ { "asd", 2 }, { "zxc", 1 }, { "s", 2 } }));
    BOOST_CHECK(CountWords(" , , , ,asd zxc s , , s asd") == mapWords({ { "asd", 2 }, { "zxc", 1 }, { "s", 2 } }));
    BOOST_CHECK(CountWords("R2D2") == mapWords({ { "R2D2", 1 } }));
    BOOST_CHECK(CountWords("7777 это цифра") == mapWords({ { "это", 1 }, { "цифра", 1 } }));
}

Тесты привести в читаемый вид. Не проверяется ряд ситуаций: пустой ввод ввод, не содержащий слов *для каждого сценария использования должно быть ясно, что именно проверяется (либо имя теста, либо (что менее хорошо) комментарий, либо должно быть понятно из самой проверки (только для простых тестов обычно применимо)

alexey-malov commented 8 years ago

alexey-malov commented 8 years ago

Проверка от 01 декабря Не выполнено требование задания:

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

alexey-malov commented 8 years ago

тесты должны запускаться и в Release-конфигурации -- выполнено

alexey-malov commented 8 years ago

В тесты добавить проверку следующий ситуаций:


не хватает тестов пустой строки

alexey-malov commented 8 years ago
#include "vector"

имена стандартных файлов должны быть указаны в угловых кавычках


WordCount.cpp:

#include "WordCount.h"
#include <sstream>
#include <algorithm>
#include <locale>
#include <fstream>
#include <boost/algorithm/string.hpp>

много лишних #include-ов

alexey-malov commented 8 years ago

не устранена постоянная пересборка проектов

alexey-malov commented 8 years ago
BOOST_AUTO_TEST_CASE(test_first_punctuation_after_the_word)
{
    BOOST_CHECK(CountWords("......,,,,,., много знаков") == mapWords({ { "много", 1 }, { "знаков", 1 } }));
}

проверяем символы пунктуации перед словами - test punctuation before words

alexey-malov commented 8 years ago

0,9