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

Нужны комментарии к строке кода - C++

Восстановить пароль Регистрация
 
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
21.12.2011, 21:08     Нужны комментарии к строке кода #1
Здравствуйте, у меня непонятки, если несложно, объясните некоторое в приложенные кусочках кода.
C++
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
int podschet (char *s)
{
    return *s ? *s >= '0' && *s <= '9' ? 1 + podschet (s+1) : podschet (s +1) : 0;
}
int main()
Будьте добры, здесь объясните строчку, начатую с return (Т.е., что происходит, где тут вложенность если есть, конечно)

и еще другой кусочек
C++
1
2
3
4
5
for (i = a; i < b + 1; ++i) {
    printf("%d, ", s(i));
}
printf("\n");
return 0;
Здесь впорос - какая роль у %d (остаток от деления?) и что означает \n ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.12.2011, 21:12     Нужны комментарии к строке кода #2
первая строчка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Так код лучше не писать. Его сложнее дебажит, воспринимать и модифицировать.
// return *s ? *s >= '0' && *s <= '9' ? 1 + podschet (s+1) : podschet (s +1) : 0;
 
// Аналогичный код:
if (*s)
{
  if (*s >= '0' && *s <= '9') // такой кривой аналог ф-ии isdigit
  {
     return 1 + podschet(s+1);     
  }
  else
  {
     return podschet (s+1);
  }
}
else
{
  return 0;
}

%d означает, что первый аргумент, после паттерна будет интерпретироваться ф-ией printf как int.
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
21.12.2011, 21:18  [ТС]     Нужны комментарии к строке кода #3
Спасибо.
И еще простенький вопрос для конкретизации, для чего прибавляется единица к "podschet" и ф-и "s" ?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.12.2011, 21:21     Нужны комментарии к строке кода #4
похоже что ф-ия podschet - это рекурсивная ф-ия подсчета количества цифр в строке.
s + 1 это увеличние указателя на символ на еденицу. т.е. следующий за текущим символ.
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
21.12.2011, 21:24  [ТС]     Нужны комментарии к строке кода #5
Хех, до меня все равно нее дошло зачем прибавлять единицу. Это проход по строке или как?
ego
 Аватар для ego
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 10
21.12.2011, 21:24     Нужны комментарии к строке кода #6
Цитата Сообщение от пинокио Посмотреть сообщение
что означает \n ?

\n - переход на новую строчку
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.12.2011, 21:28     Нужны комментарии к строке кода #7
Вот упростил
C++
1
2
3
4
size_t count_digit (const char *s) 
{ 
    return *s ? !! isdigit (*s) + count_digit (s+1) : 0 ;
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.12.2011, 21:29     Нужны комментарии к строке кода #8
да. это такой проход по строке.
лучше это переписать на что-нибудь вроде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool IsDigit(char ch)
{
  return ch >= '0' && ch <= '9';
}
 
int CalcDigits(const char* str)
{
  int result = 0;
  if (str != 0)
  {
    for (const char* p = str; *p != 0; ++p)
    {
      if (IsDigit(*p))
        ++result;
    }
  }
  return result;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2011, 21:38     Нужны комментарии к строке кода
Еще ссылки по теме:

C++ Нужны комментарии к программе
Функция (нужны комментарии ) C++
Нужны комментарии к программе C++

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

Или воспользуйтесь поиском по форуму:
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
21.12.2011, 21:38  [ТС]     Нужны комментарии к строке кода #9
DU, спасибо.
Yandex
Объявления
21.12.2011, 21:38     Нужны комментарии к строке кода
Ответ Создать тему
Опции темы

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