Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
k1T4eR
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 1
#1

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

14.02.2013, 01:33. Просмотров 894. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2013, 01:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Оценка стиля написания кода (C++):

Изменение стиля
Добрый день!!!! Кто нибудь сталкивался с такой проблемой, при переводе на...

Замена стиля
Приветствую, ребята. У меня вопросик :). В RAD XE есть возможность задавать...

Изменение стиля программирования
Всех приветствую! Стало интересно, существует ли в Билдере (использую XE2)...

Создание собственного стиля окон
Как в C++ Builder создать свой вид форм вместо стандартного вида?

ListBox, строки разного цвета и стиля
Как можно сделать разным стиль текста(размер шрифта, цвет) в разных строках...

Изменение стиля текста подпутнкта меню
Точнее рабоатет но тек как мне надо: изначально было так: Button-&gt;Down =...

4
M9ICHIK
63 / 63 / 23
Регистрация: 09.12.2012
Сообщений: 459
14.02.2013, 01:37 #2
Комментарии не забывай писать . Очень выручают, если проекты большие.
0
Dmitriy_M
1412 / 1295 / 126
Регистрация: 20.03.2009
Сообщений: 4,614
Записей в блоге: 11
14.02.2013, 12:38 #3
Цитата Сообщение от k1T4eR Посмотреть сообщение
Код у меня рабочий.
Много new, и ни одного delete.
Вектор по ссылке религия не позволяет передавать, только через указатель?
0
KATbIK
86 / 81 / 28
Регистрация: 02.08.2011
Сообщений: 335
14.02.2013, 13:46 #4
Пробелы между операторами не помешали бы.
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5115 / 1553 / 950
Регистрация: 23.01.2011
Сообщений: 3,179
Завершенные тесты: 1
14.02.2013, 19:09 #5
если интересно, то почитайте
http://habrahabr.ru/post/150329/
2
14.02.2013, 19:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 19:09
Привет! Вот еще темы с решениями:

Сохранение в Ini фаил стиля шрифта
как лучше сделать сохранение? Например есть: В TopStringStyle че...

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

Почему при создании пустого проекта не открывается окно для написания кода? Visual Studio 2010
Парни не подскажете почему при создании пустого проекта не открывается окно для...

Изменение стиля контрола
Немогу поменять стиль контрола EDIT lStyle = GetWindowLong(hEd1,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru