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

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

12.03.2008, 17:08. Показов 5090. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2008, 17:08
Ответы с готовыми решениями:

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

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

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

10
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 18:41
ну начнем...))
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  [ТС]
пасибо большое! стало немного понятнее. а как нибудь мозно упростить эту функцию?
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:33
ну вообще правильнее (если я верно понимаю задумку автора функции) писать вместо s[from][0] = 0 такую строку s[from]=NULL;
а так, вообще упростить её нельзя..
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:35  [ТС]
а если сделать аналогичную функцию, только другими коммандами?
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:39  [ТС]
или может аналогов этих комманд больше нету?
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:49
Цитата Сообщение от 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
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:57
А еще можно вот так вот
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
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 20:00
Ну и еще, только я не уверен в правильности работы этой функции можно сдеоать так:
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  [ТС]
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 20:07
Цитата Сообщение от rolya Посмотреть сообщение
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
Незачто)) Будут вопросы - обращайтесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2008, 20:07
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru