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

рекурсивная функция - C++

Восстановить пароль Регистрация
 
boo777
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 12
29.10.2010, 12:50     рекурсивная функция #1
Описать рекурсивную функцию Digits(S) целого типа, находящую количество цифр в строке S без использования оператора цикла. С помощью этой функции найти количество цифр в данных пяти строках.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2010, 12:50     рекурсивная функция
Посмотрите здесь:

Рекурсивная функция. C++
Рекурсивная функция C++
Рекурсивная функция C++
Рекурсивная функция C++
C++ Рекурсивная функция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:06     рекурсивная функция #2
C++
1
2
3
4
5
6
7
int count_digits(char* s){
    static int count=0;
    if (isdigit(*s)) count++;
    else
    if (*s=='\0') return count;
    return count_digits(++s);
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.10.2010, 13:17     рекурсивная функция #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <ctype.h>
 
int dcnt(const char * s){ return ( ! *s ) ? 0 :  ( isdigit(*s) ) ? 1 + dcnt(s + 1) : dcnt(s + 1); }
 
#define ROWS 5
 
int main(void){
    char buf[BUFSIZ];
    int i;
 
    for ( i = 0; i < ROWS && printf("Row #%d: ", i + 1) && fgets(buf, BUFSIZ, stdin); ++i )
        printf("%d digits.\n", dcnt(buf));
 
    return 0;
}
Добавлено через 53 секунды
PointsEqual, а пробовали эту функцию два раза подряд вызывать?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:24     рекурсивная функция #4
Цитата Сообщение от easybudda Посмотреть сообщение
PointsEqual, а пробовали эту функцию два раза подряд вызывать?
нет, щас попробую

Добавлено через 1 минуту
это все из -за
C++
1
static int count
да?

Добавлено через 1 минуту
)))
C++
1
2
3
4
5
6
7
8
9
10
11
int count_digits(char* s){
    static int count=0;
    if (isdigit(*s)) count++;
    else
    if (*s=='\0') {
        int tmp = count;
        count = 0;
        return tmp;
    }
    return count_digits(++s);
}
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
29.10.2010, 13:25     рекурсивная функция #5
А я бы так написал:
C
1
2
3
4
int digits_count (const char * s) {
    if (*s != '\0') return isdigit(*s) + digits_count(s + 1);
    else return 0;
}
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:28     рекурсивная функция #6
Цитата Сообщение от volovzi Посмотреть сообщение
int digits_count (const char * s) {
if (*s != '\0') return isdigit(*s) + digits_count(s + 1);
else return 0;
}
и ответ поделить на 4
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
29.10.2010, 13:30     рекурсивная функция #7
Цитата Сообщение от PointsEqual Посмотреть сообщение
и ответ поделить на 4
С какого это перепугу?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:40     рекурсивная функция #8
Цитата Сообщение от volovzi Посмотреть сообщение
С какого это перепугу?
C++
1
2
3
    cout<<digits_count("12345") << endl;
    cout<<digits_count("123") << endl;
    cout<<digits_count("123456789") << endl;
Миниатюры
рекурсивная функция  
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.10.2010, 13:47     рекурсивная функция #9
Цитата Сообщение от volovzi Посмотреть сообщение
А я бы так написал:
Да можно и так, один момент смущает. В man isdigit пишут, что
RETURN VALUES
The isdigit() and isnumber() functions return zero if the character tests
false and return non-zero if the character tests true.
То есть, не гарантированно, что она должна единицу возвращать, только число, отличное от нуля. В принципе можно и так
C
1
2
3
int isdigit(int ch){
    return ( ch >= '0' && ch <= '9' ) ? ch : 0;
}
эту функцию написать по каким-нибудь идейно-политическим соображениям разработчика компилятора...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2010, 14:02     рекурсивная функция
Еще ссылки по теме:

C++ рекурсивная функция
Рекурсивная функция C++
C++ Рекурсивная функция

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

Или воспользуйтесь поиском по форуму:
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
29.10.2010, 14:02     рекурсивная функция #10
Мда, действительно, без тернарного не обойтись:
C
1
2
3
4
int digits_count (const char * s) {
    if (*s != '\0') return (isdigit(*s) ? 1 : 0) + digits_count(s + 1);
    else return 0;
}
Yandex
Объявления
29.10.2010, 14:02     рекурсивная функция
Ответ Создать тему
Опции темы

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