0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
1

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

12.03.2008, 17:08. Показов 4697. Ответов 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++ ;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2008, 17:08
Ответы с готовыми решениями:

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

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

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

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

10
88 / 16 / 5
Регистрация: 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.
Ну вот и все)) Правда функция не закончена, нету закрывающейся фигурной скобки в конце.
1
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:24  [ТС] 3
пасибо большое! стало немного понятнее. а как нибудь мозно упростить эту функцию?
0
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:33 4
ну вообще правильнее (если я верно понимаю задумку автора функции) писать вместо s[from][0] = 0 такую строку s[from]=NULL;
а так, вообще упростить её нельзя..
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:35  [ТС] 5
а если сделать аналогичную функцию, только другими коммандами?
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:39  [ТС] 6
или может аналогов этих комманд больше нету?
0
88 / 16 / 5
Регистрация: 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++ ;
0
88 / 16 / 5
Регистрация: 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] ) ;
}
0
88 / 16 / 5
Регистрация: 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++ ;
ну еще конечно, можно поменять имена переменным и самой функции))
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 20:03  [ТС] 10
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
0
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 20:07 11
Цитата Сообщение от rolya Посмотреть сообщение
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
Незачто)) Будут вопросы - обращайтесь
0
12.03.2008, 20:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2008, 20:07
Помогаю со студенческими работами здесь

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

Что делает эта функция?
Здравствуйте! У меня есть следующая функция, однако не совсем понимаю, что она делает. Кто-то может...

Что делает функция weird_thing.
Что делает это функция? weird_thing()

Что делает функция length?
void main() { using namespace std; string st,stt; cout << "enter name files:" <<endl; char...


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

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

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