Kronos0041 / OOP_PS22-master

MyRepository
0 stars 0 forks source link

Замечания по программе подсчета частоты встречаемости слов #7

Open alexey-malov opened 9 years ago

alexey-malov commented 9 years ago

Не исправлены предупреждения компилятора

1>d:\teaching\2015\students\puryshev\oop_ps22-master\lab2_zad3_var1\lab2_zad3_var1\mapprocessor.cpp(34): warning C4018: '<=' : signed/unsigned mismatch
1>d:\teaching\2015\students\puryshev\oop_ps22-master\lab2_zad3_var1\lab2_zad3_var1\mapprocessor.cpp(58): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\vs2013\vc\include\string.h(112) : see declaration of 'strcpy'
alexey-malov commented 9 years ago

Имена переменных должны использовать lowerCamelCase

alexey-malov commented 9 years ago

В заголовочных файлах `

include "stdafx.h"

` писать не следует Как и using namespace

alexey-malov commented 9 years ago
    string word = "";

не надо присваивать пустую строку. конструктор по умолчанию и так сконструирует пустую строку

alexey-malov commented 9 years ago
        if ((symbol < 65 || symbol > 122) || (symbol > 90 && symbol < 97))

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

???

symbol -> ascii код для проверки вхождения только букв, которую взял отсюда http://cppstudio.com/post/276/ то есть от A...Z и от a...z Мне как-то по другому сделать проверку, или эта не годится?

Что такое 65 или 122? Используйте вместо них символьные литералы

alexey-malov commented 9 years ago
                map <string, int>::iterator it = Dictionary.find(word);
                if (it != Dictionary.end())
                {
                    Dictionary[word]++;
                }
                else
                {
                    Dictionary[word] = 1;
                }

прочитайте про оператор [] класса map, как он работает в отсутствие значения с указанным ключом Вышеописанный код можно записать в виде: ++Dictionary[word] И отдавайте предпочтение префиксной форме инкремента и декремента

alexey-malov commented 9 years ago
    int symbol;

почему используется тип int для хранения символов строки, а не char?

???

symbol -> ascii код для проверки вхождения только букв http://www.cyberforum.ru/cpp-beginners/thread97052.html

Для хранение кодов символов ascii-таблицы достаточно типа char Для хранения (практически всего) юинкода - wchar_t

alexey-malov commented 9 years ago
            word = word + line[count];

более эффективно здесь использовать метод append либо push_back

alexey-malov commented 9 years ago
    int count = 0;

для индексации элементов контейнеров vector и string следует использовать тип size_t. Иначе на 64 битных платформаз программа будет работать некорректно

alexey-malov commented 9 years ago
char* ShowDictionary(map <string, int> Dictionary)
{
    int Value = 0;
    string Key;
    char* Result;
    map<string, int>::iterator it;
    map<string, int>::iterator itEnd = Dictionary.end();

    it = Dictionary.begin();

    while (it != itEnd)
    {
        if (Value < (*it).second)
        {
            Value = (*it).second;
            Key = (*it).first;
        }
        ++it;
    }
    Result = new char[Key.length() + 1];
    strcpy(Result, Key.c_str());
    return Result;
}

утечка памяти. Память выделенная при помощи new нигде не освобождается

alexey-malov commented 9 years ago

за исполнение 0,2 за срок: 0.8

alexey-malov commented 9 years ago

Все равно сатанизм. Сдайте очно на практическом занятии