k1T4eR
1

Оценка стиля написания кода

14.02.2013, 01:33. Показов 1271. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Я к вам пожаловал не с очередной проблемой. Код у меня рабочий.
Меня интересует то, насколько стандартен мой стиль написания программ? Стоит ли усложнять/упрощать что то, и т.п.?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
struct Alpha;
typedef vector<Alpha*> AlphaVec;
 
struct Alpha
{
    Alpha(char s,string &c): symbol(s), code(c) {}
    char symbol;
    string code;
};
 
Alpha* DiscoverStr(const string &str)
{
    string letter(1,str[0]);
    string code_l;
    for(string::size_type i=4; i!=str.size(); i++)
        code_l.push_back(str[i]);
    return new Alpha(letter[0],code_l);
}
 
void ShowVector(AlphaVec *vec)
{
    cout<<"Алфавит и коды:"<<endl;
    for(AlphaVec::iterator it=vec->begin(); it!=vec->end(); it++)
        cout<<(*it)->symbol<<"\t"<<(*it)->code<<endl;
}
 
//не является ли 1 началом какого-либо 2,3,4,5... ?
bool HasPrefix(const string &a, const string &b)
{
    return (a>b?a:b).find(a<b?a:b);
}
 
bool IsPrefix(const AlphaVec *codes)
{
    for(AlphaVec::const_iterator iter=codes->begin(); iter!=codes->end(); iter++)
    {
        for(AlphaVec::const_iterator it=codes->begin(); it!=iter; it++)
            if (!HasPrefix((*iter)->code,(*it)->code))
                return false;
        for(AlphaVec::const_iterator it=iter+1; it<codes->end(); it++)
            if (!HasPrefix((*iter)->code,(*it)->code))
                return false;
    }
    return true;
}
 
bool CompareByLen(const Alpha *a,const Alpha *b)
{
    return a->code.size() > b->code.size();
}
 
string* DecodeMsg(const string &CodedMsg,AlphaVec *codes)
{
    if (!IsPrefix(codes))
        return new string("Сообщение не может быть однозначно декодировано");
    string *DecodedMsg = new string;
    string left_code(CodedMsg);
 
    sort(codes->begin(),codes->end(),CompareByLen);
 
    while (left_code.size())
        for(string::size_type symbols_taken(1); symbols_taken<=left_code.size(); symbols_taken++)
        {
            bool replace_state(false);
            string prob_code(left_code.substr(0,symbols_taken));
            for(AlphaVec::iterator it=codes->begin(); it!=codes->end(); it++)
                if ((*it)->code==prob_code)
                {
                    DecodedMsg->push_back((*it)->symbol);
                    left_code.erase(0,symbols_taken);
                    replace_state=true;
                    break;
                }
            if (replace_state)
                break;
            if (!replace_state && symbols_taken==left_code.size())
            {
                DecodedMsg->push_back(left_code[0]);
                left_code.erase(0,1);
            }
        }
    return DecodedMsg;
}
 
int main()
{
    setlocale(LC_CTYPE, "");
    ifstream AlphaInput("Alpha.txt");
    AlphaVec *symbols = new AlphaVec;
    string str;
    if (AlphaInput)
        while (getline(AlphaInput,str))
            if (str[0]==';')
                continue;
            else symbols->push_back(DiscoverStr(str));
    AlphaInput.close();
    ShowVector(symbols);
    string CodedMsg;
    cout<<endl<<"Закодированное сообщение: ";
    getline(cin,CodedMsg);
    string *DecodedMsg = DecodeMsg(CodedMsg,symbols);
    cout<<endl<<"Результат: "<<*DecodedMsg;
    cin.get();
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2013, 01:33
Ответы с готовыми решениями:

Как настроить среду для написания и компиляции кода
Есть одна проблема. Раньше писал на Visual Studio 6, все было Ок! Сейчас работаю в 2005 версии, и...

Оценка стиля кода
Народ, есть предложение. Оцените мой код. Не в смысле функционала - в смысле стиля написания. ...

оценка написания простой игры
недавно написал простейшую игру для практики. хотелось бы услышать критику. #include &lt;iostream&gt;...

Советы по ускорению работы кода + оценка самого кода
Вчера вечером сел написать 3 консольные программки для работы с шаблонами размножения текста:...

4
63 / 63 / 23
Регистрация: 09.12.2012
Сообщений: 459
14.02.2013, 01:37 2
Комментарии не забывай писать . Очень выручают, если проекты большие.
0
1441 / 1322 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
14.02.2013, 12:38 3
Цитата Сообщение от k1T4eR Посмотреть сообщение
Код у меня рабочий.
Много new, и ни одного delete.
Вектор по ссылке религия не позволяет передавать, только через указатель?
0
86 / 81 / 28
Регистрация: 02.08.2011
Сообщений: 335
14.02.2013, 13:46 4
Пробелы между операторами не помешали бы.
0
Mobile Software Engineer
Эксперт С++
5365 / 1584 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
14.02.2013, 19:09 5
если интересно, то почитайте
http://habrahabr.ru/post/150329/
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2013, 19:09
Помогаю со студенческими работами здесь

Вопрос по стандартам написания кода
Положим, что я пишу код на С++ и использую расширения .cpp для файлов, но при этом использую, в...

Оценка кода
Суть задачи описал вначале кода, хотелось бы услышать, что можно было сделать лучше, где можно было...

Оценка кода
Добрый день! Есть задание в ВУЗе: Я сделал следующий код: #include &lt;iostream&gt; #include...

Оценка кода
Здравствуйте, прошу вас всех оценить мой код , по возможности дать советы что так , а что не так и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru