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

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

Войти
Регистрация
Восстановить пароль
 
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
#1

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

21.12.2011, 21:08. Просмотров 674. Ответов 8
Метки нет (Все метки)

Здравствуйте, у меня непонятки, если несложно, объясните некоторое в приложенные кусочках кода.
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 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2011, 21:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужны комментарии к строке кода (C++):

Как istringstream считает количество слов в строке? (нужны комментарии) - C++
Нашел следующий код в старых темах форума, и пытаюсь разобраться как он работает (считает количество слов в строке): #include &lt;iostream&gt; ...

Написать подробные комментарии к каждой строке кода - C++
Напишите комментарий к каждой команде что она делает пожалуйста #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;numeric&gt; using...

Нужны комментарии к программе - C++
вот два кода программ, нужны комментарии к коду и алгоритм программы: 1)Дана действительная матрица 6x9 MxN.Найти значения...

Функция (нужны комментарии ) - C++
Объясните как работает Задание : Написать программу переворачивающую массив Действия оформить в виде функции Вывод массива на экран...

Нужны комментарии к программе - C++
#include &lt;cmath&gt; #include &lt;iomanip&gt; #include &lt;iostream&gt; using namespace std; int fact(int i) { if (i==0) return...

Нужны комментарии к коду - C++
int bestStr(char** file, int numstr) { int iBest = -1, bestwords = 0; for (int i = 0; i &lt; numstr; i++) { int goodwords =...

8
DU
1483 / 1129 / 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.
1
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
21.12.2011, 21:18  [ТС] #3
Спасибо.
И еще простенький вопрос для конкретизации, для чего прибавляется единица к "podschet" и ф-и "s" ?
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.12.2011, 21:21 #4
похоже что ф-ия podschet - это рекурсивная ф-ия подсчета количества цифр в строке.
s + 1 это увеличние указателя на символ на еденицу. т.е. следующий за текущим символ.
1
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
21.12.2011, 21:24  [ТС] #5
Хех, до меня все равно нее дошло зачем прибавлять единицу. Это проход по строке или как?
0
ego
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 10
21.12.2011, 21:24 #6
Цитата Сообщение от пинокио Посмотреть сообщение
что означает \n ?

\n - переход на новую строчку
1
go
Эксперт С++
3586 / 1366 / 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 ;
}
1
DU
1483 / 1129 / 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;
}
1
пинокио
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 6
21.12.2011, 21:38  [ТС] #9
DU, спасибо.
0
21.12.2011, 21:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2011, 21:38
Привет! Вот еще темы с ответами:

Нужны комментарии к программам - C++
обьясните пожалуйста проги, что делают какие строчки 2.1. Алгоритм уравнения прямой y = ax + b. #include &lt;time.h&gt; #include...

Нужны комментарии к программе - C++
нужны Коментарии к программе нужно узнать что делает каждая функция #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; ...

Нужны комментарии к коду - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; //ЗАДАЧА #14 void print_array(int *a, int n) { for (int...

Нужны комментарии к программе - C++
Сама задача: &lt; символ &gt; : := &lt; буква &gt; | &lt; код &gt; | &lt; знак &gt; | &lt;разделитель&gt;| &lt; цифра &gt; &lt; знак &gt; : := v | -&gt; | + | * | ^ &lt;...


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

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

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