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

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

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

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

12.03.2008, 17:08. Просмотров 3422. Ответов 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++ ;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
master.EXE
 Аватар для master.EXE
111 / 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
 Аватар для master.EXE
111 / 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
 Аватар для master.EXE
111 / 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
 Аватар для master.EXE
111 / 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
 Аватар для master.EXE
111 / 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     Что делает функция
Еще ссылки по теме:

Что делает эта функция? C++
C++ Что делает функция weird_thing.
C++ Что делает функция time?
что делает данная функция C++
C++ Что делает функция?

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

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

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