Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.64
rolya
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
#1

Что делает функция - C++

12.03.2008, 17:08. Просмотров 3510. Ответов 10
Метки нет (Все метки)

имеется вот такая функция. Обясние пожалуйста что она делает? что ето за команды которые она использует и как они работают.
В интернете я о них что то мало чего нашел, а если и нашел то не понятно. Может можно как то упростить эту функцию?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int move( int disk, int from, int to)
     {
        char *str_pos = strchr( s[from], '-' ) ;
        
        if( str_pos == NULL )
          s[from][0] = 0 ;
        else
          strcpy( s[from], str_pos+1 ) ;
        if( s[to][0] == 0 )
          sprintf( s[to], "%d", disk ) ;
        else
        {
           strcpy( s[0], s[to] ) ;
           sprintf( s[to], "%d-%s", disk, s[0] ) ;
        }
        step++ ;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2008, 17:08     Что делает функция
Посмотрите здесь:

Что делает функция? - C++
void countFrequency( const std::string & str, int *frequency ) //принимаем строку, и указатель на интовый массив { int idx; ...

что делает функция? - C++
int slength ( char*str){ int Len = -1; while (++len, *str++); return len; } возвращает длину строки? Добавлено через 42...

Что делает функция strlen() ? - C++
Функция strlen()…что она делает...?

Что делает функция time? - C++
Объясните доступным языком, пожалуйста, в библиотеке time.h есть команда: time_t currentTime = time(0); Можно какую-то расшифровку или...

что делает данная функция - C++
bool isProoved(Node& node) { for (string left : node.left) for (string right : node.right) if (isSingleExpression(left) &&...

Что делает эта функция? - C++
func(x) { if (x == 0) { return 0 } return func(x / 10) + x % 10 }

Что делает эта функция? - C++
Что делает эта функция? int vich_cods(const void *a, const void *b){ // return *(char*)a - *(char*)b; }

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 18:41     Что делает функция #2
ну начнем...))
move - функция, которая принимает три параметра типа int, и возвращает тоже int.
str_pos - указатель на тип char, который указывает на первое вхождение символа '-' строку s[form] (s - скорее всего глобальный массив указателей на тип char - массив строк), где form - номер строки. Если в строке s[form] не будет находиться символ '-', то функция strchr вернет NULL, следовательно, и str_pos тоже будет равен NULL.
Дальше идет проверка.
Если str_pos равен NULL, то есть в строке s[form] не обнаружено символа '-', то присвоить первому (то есть нулевому) символу строки s[form] значение NULL (0).
Иначе, с помощью функции strcpy, та часть строки s[form], которая идет за первым вхождением символа '-' в эту строку, копируется в строку s[form] (в самое начало строки, тоесть затирая её начало).
Идет еще одна проверка.
Если первый символ строки s[to] является 0 (NULL), то переменная disk запишется в строку s[to] как целое число без знака. Иначе, содержимое строки s[to] скопируется в строку s[0], и в строку s[to] запишется: переменная disk как целое число без знака, потом дефис и строка s[0].
Ну и в конце значение переменной step увеличится на 1.
Ну вот и все)) Правда функция не закончена, нету закрывающейся фигурной скобки в конце.
rolya
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:24  [ТС]     Что делает функция #3
пасибо большое! стало немного понятнее. а как нибудь мозно упростить эту функцию?
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:33     Что делает функция #4
ну вообще правильнее (если я верно понимаю задумку автора функции) писать вместо s[from][0] = 0 такую строку s[from]=NULL;
а так, вообще упростить её нельзя..
rolya
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:35  [ТС]     Что делает функция #5
а если сделать аналогичную функцию, только другими коммандами?
rolya
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:39  [ТС]     Что делает функция #6
или может аналогов этих комманд больше нету?
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:49     Что делает функция #7
Цитата Сообщение от rolya Посмотреть сообщение
а если сделать аналогичную функцию, только другими коммандами?
Ну вот щас попробую, просто тут используются функции из библиотеки string,h, такие как strchr, strcpy, и функция sprintf - им замен не будет. Если конечно не написать свои собственные функции)))) Но можно заменить оперетор if else тернарной операцией ?.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int move( int disk, int from, int to)
{
char *str_pos = strchr( s[from], '-' ) ;
 
(str_pos == NULL)?(s[from][0] = 0):strcpy( s[from], str_pos+1 );
if( s[to][0] == 0 )
sprintf( s[to], "%d", disk ) ;
else
{
strcpy( s[0], s[to] ) ;
sprintf( s[to], "%d-%s", disk, s[0] ) ;
}
step++ ;
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:57     Что делает функция #8
А еще можно вот так вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int move( int disk, int from, int to)
{
char *str_pos = strchr( s[from], '-' ) ;
 
(str_pos == NULL)?(s[from][0] = 0):strcpy( s[from], str_pos+1 );//применили тернарную операцию
(s[to][0] == 0)?sprintf( s[to], "%d", disk ):sprintf( s[to], "%d-%s", disk, strcpy(s[0], s[to]));//еще раз применили ьернарную операцию
step++ ;
 
sprintf( s[to], "%d-%s", disk, strcpy(s[0], s[to])); последним параметром функции sprintf является оператор strcpy(s[0], s[to]), так как он возвращает указатель на строку s[0], то он является заменой целому блоку
{
strcpy( s[0], s[to] ) ;
sprintf( s[to], "%d-%s", disk, s[0] ) ;
}
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 20:00     Что делает функция #9
Ну и еще, только я не уверен в правильности работы этой функции можно сдеоать так:
C++
1
2
3
4
5
6
7
int move( int disk, int from, int to)
{
char *str_pos = strchr( s[from], '-' ) ;
 
(str_pos == NULL)?(s[from] = NULL):strcpy( s[from], str_pos+1 );
(s[to] == NULL)?sprintf( s[to], "%d", disk ):sprintf( s[to], "%d-%s", disk, strcpy(s[0], s[to]));
step++ ;
ну еще конечно, можно поменять имена переменным и самой функции))
rolya
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 20:03  [ТС]     Что делает функция #10
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2008, 20:07     Что делает функция
Еще ссылки по теме:

Что делает функция wsprintf? - C++
Что делает функция wsprintf ? п.с. FillFoldersListBox принимает строку "A:\\0" (например) и деструктор нужного листбокса int...

Что делает функция getline - C++
Можете мне объяснить что делать функция getline и если не сложно превисти пример ее использования

Что делает функция strcpy(t, f) - C++
Функция strcpy(t, f) что она делает?

Что делает функция rename_unlink - C++
Имеется следующая программа,надо откоментировать и собственно понять,что делает каждая из функций? #if defined(__unix__) #include...

Что делает функция srand? - C++
референсы говорят что нужен srand() что бы rand() работал и давал разные значения каждый раз, но я его не использовал, но все равно всё ок...


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

Или воспользуйтесь поиском по форуму:
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 20:07     Что делает функция #11
Цитата Сообщение от rolya Посмотреть сообщение
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
Незачто)) Будут вопросы - обращайтесь
Yandex
Объявления
12.03.2008, 20:07     Что делает функция
Ответ Создать тему
Опции темы

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