Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "чистота" кода 
:(
    Опции темы
C4sh
Дата 3.1.2011, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 1.7.2010
Где: Харьков, Украина

Репутация: нет
Всего: нет



Привет. Прошу посмотреть на код и указать на ошибки оформления.

Код

#include <iostream>
using std::cout;
using std::cin;

int find( char string[], char required[], int numberOfCharactersPerLine, int numberOfCharactersInTheDesired );

int firstStageOfTheAnalysisLine( char string[], char required[], int stringLength, int requiredLength );

int secondStageOfTheAnalysisLine( char string[], char required[], int stringLength, int requiredLength,
                 int positionOfFirstCharacter, int positionOfLastCharacter );

void getCharacterPosition( char string[], char required[], int stringLength, int requiredLength,
                          int &positionOfFirstCharacter, int &positionOfLastCharacter );

int compareTheOccurrence( char string[], char required[], int requiredLength, 
                         int positionOfFirstCharacter, int positionOfLastCharacter );
int main( int argc, char *argv[] ) {
    char string[ 128 ];
    char required[ 128 ];
    cin.getline( string, 227 );
    cin.getline( required, 127 );
    int pos = find( string, required, 7, 2);

    cout << pos;

    return 0;
}

int find( char string[], char required[], int numberOfCharactersPerLine, int numberOfCharactersInTheDesired  ) {
    int stringLength = numberOfCharactersPerLine;
    int requiredLength = numberOfCharactersInTheDesired;

    int positionOfFirstCharacter = 0;
    int positionOfLastCharacter = 0;


    if( firstStageOfTheAnalysisLine( string, required, stringLength, requiredLength ) == 0 ) {
        getCharacterPosition( 
            string,
            required, 
            stringLength, 
            requiredLength,
            positionOfFirstCharacter, 
            positionOfLastCharacter 
            );
    }

    if( secondStageOfTheAnalysisLine( string, required, stringLength, requiredLength,
        positionOfFirstCharacter, positionOfLastCharacter ) != 0 )
            return ( - 1 );

    return positionOfFirstCharacter;
}

void getCharacterPosition( char string[], char required[], int stringLength, int requiredLength,
                          int &positionOfFirstCharacter, int &positionOfLastCharacter ) {
        const int firstCharacter = 0;
        const int lastCharacter = requiredLength - 1;

        for( int i = 0; i < stringLength; i++ ) {
            if( string[ i ] == required[ firstCharacter ] )
                positionOfFirstCharacter = i;
            else if( string[ i ] == required[ lastCharacter ] )
                positionOfLastCharacter = i;
        }
    return;
}
int secondStageOfTheAnalysisLine( char string[], char required[], int stringLength, int requiredLength,
                 int positionOfFirstCharacter, int positionOfLastCharacter ) {
    if( requiredLength != ( ( positionOfLastCharacter - positionOfFirstCharacter ) + 1 ) )
        return ( -1 );
    else {
        if( compareTheOccurrence( string, required, requiredLength,
            positionOfFirstCharacter, positionOfLastCharacter ) != 0 )
                return ( -1 );
    }
    return 0;
}

int firstStageOfTheAnalysisLine( char string[], char required[], int stringLength, int requiredLength ) {
    if( stringLength < requiredLength )
        return ( -1 );
    else if( stringLength == requiredLength )
            for( int i = 0; i < stringLength; i++ )
                if( string[ i ] != required[ i ] )
                    return ( -1 );
    return 0;
}

int compareTheOccurrence( char string[], char required[], int requiredLength, 
                         int positionOfFirstCharacter, int positionOfLastCharacter ) {
    for( int i = 0, k = positionOfFirstCharacter; i < requiredLength, k <= positionOfLastCharacter; k++, i++ ) {
        if( string[ k ] != required[ i ] )
            return ( -1 );
        }
    return 0;
}


Спасибо.
PM MAIL Jabber   Вверх
Modul
Дата 3.1.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Бегло просмотрел.

Цитата(C4sh @  3.1.2011,  15:00 Найти цитируемый пост)
int find( char string[], char required[], int numberOfCharactersPerLine, int numberOfCharactersInTheDesired );


Хоть так и можно, но лучше так:
Код

void findToStr(char *a, char *b);



1) Можно оформить в виде модуля (библиотеки функций) или класса;
2) Лучше избегать названий переменных string, чтобы путаницы с std::string не было;
3) Больно длинные имена переменных, например, numberOfCharactersInTheDesired;
4) А в STL этого велосипеда нет случайно ?
--------------------
I'll be back !
PM MAIL   Вверх
C4sh
Дата 3.1.2011, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 1.7.2010
Где: Харьков, Украина

Репутация: нет
Всего: нет



Цитата

1) Можно оформить в виде модуля (библиотеки функций) или класса;


Да маловато для класса smile

Цитата

2) Лучше избегать названий переменных string, чтобы путаницы с std::string не было;

учту

Цитата

3) Больно длинные имена переменных, например, numberOfCharactersInTheDesired;

Пытался сделать имена ясными.

Цитата

4) А в STL этого велосипеда нет случайно ? 

Ну задача стояла в реализации своего алгоритма поиска подстроки smile
PM MAIL Jabber   Вверх
alexvs11
Дата 3.1.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



Цитата(C4sh @  3.1.2011,  15:00 Найти цитируемый пост)
    return;

бессмысленная конструкция в данном случае
потом всегда считал, что в циклах надо использовать ++i, вместо i++, но это не критично
PM MAIL   Вверх
triclosan
Дата 3.1.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 2
Всего: 12



Цитата(alexvs11 @  3.1.2011,  17:07 Найти цитируемый пост)
но это не критично 

для примитивных типов - да.
PM MAIL   Вверх
Sartorius
Дата 3.1.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 2
Всего: 37



В названии метда/функции должен все-таки быть глагол. Используй стандартные приставки get/set/is. 
Убери magic numbers
Цитата(C4sh @  3.1.2011,  16:00 Найти цитируемый пост)
cin.getline( string, 227 )

а то так и опечататься недолго  smile 
PM MAIL ICQ   Вверх
C4sh
Дата 3.1.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 1.7.2010
Где: Харьков, Украина

Репутация: нет
Всего: нет



Спасибо за ответы, будем работать над улучшением кода smile
PM MAIL Jabber   Вверх
borisbn
Дата 5.1.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Modul @  3.1.2011,  16:14 Найти цитируемый пост)

Бегло просмотрел.

int find( char string[], char required[], int numberOfCharactersPerLine, int numberOfCharactersInTheDesired );

Хоть так и можно, но лучше так:

void findToStr(char *a, char *b);


а правильнее так smile :
Код

void findToStr( const char * const  a, const char * const  b );


А вот по поводу имён переменных типа numberOfCharactersInTheDesired соглашусь с Modul - программа становится не более понятная, а менее читабельная.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Modul
Дата 5.1.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



to borisbn

ну Вы наворотили ! 

Я поклонник древних С-шных динозавров  !

ну мне коннеЧнО это нравится, но вот думаю я: как Вы это на Qt недвусмысленно пишите в тишине ???
--------------------
I'll be back !
PM MAIL   Вверх
borisbn
Дата 6.1.2011, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Modul @  5.1.2011,  19:34 Найти цитируемый пост)
как Вы это на Qt недвусмысленно пишите в тишине ???

да вот как-то так. пописываю потихоньку. Кста, в тишине лучше пишется, НО никогда не получается.
Если знаешь как создать вокруг себя тишину - расскажи.


перечитал всё вышесказанное - набор буков.

Modul, что ты хотел сказать   smile  ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Modul
Дата 6.1.2011, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата(borisbn @  6.1.2011,  00:11 Найти цитируемый пост)
перечитал всё вышесказанное - набор буков.


Из букв получаются слова, в словах скрытый смысл.

В смысле - действие, отсюда движение и экономика.

Посмеялись мы с Вами ?!!  smile 

--------------------
I'll be back !
PM MAIL   Вверх
vnf
Дата 7.1.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



1.
Цитата(C4sh @  3.1.2011,  16:21 Найти цитируемый пост)
Да маловато для класса 

В самый раз.
Судя по коду main открытым методом будет только find. Остальные это детали реализации и их нужно скрыть.
2. 4-5 аргументов у функций - это много (использование класса позволит уменьшить их количество).

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1360 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.